由Ryan的邮件可知,node v0.8分支已经开始开发,预计将于一月初发布。v0.8分支将带来如下的新特性:
1. 将src/platform-.cc中所有平台相关的函数迁移至libuv中。
2. 移除WAF(目前node在nix下使用的编译工具) ,以后所有平台下都将使用GYP来编译。GYP是由Chromium项目引入的编译工具。
3. 目前V8通过Isolate,可以实现在同一进程的多个线程中执行独立的Javascript代码。node将对这一特性提供直接支持,即允许用户在新线程中执行Javascript代码。详情将在后文叙述。
4. 提供一种叫做Domains的机制,将与不同网络连接相关的I/O操作分离开来。当一个domain出现了异常时,domain内所有关联的I/O handle都会被清理掉。比如来了一个HTTP请求,然后这个请求发生了异常,所有和这个请求相关的I/O都会被清除。
5. node目前使用了一个内存池来分配数据流使用的buffer内存,但是这个内存分配器在很多时候效率并不高,对此将进行改进。
6. 将提供更好用的编译C++ extension的工具,以便于为所有平台开发extension。
Isolate
这几条中,最令人关注的是第3点。node在未来将提供多线程支持吗?某种程度上可以说是。
node将要提供的Isolate接口,和child_process的spawn非常相似,即在完全分离的环境里执行代码,但在Javascript层面上并不共享内存和代码。
但不同的是,每个Isolate都处在独立的线程中,而child_process则是处在独立的进程中。前者在C层面上是可以共享内存的,通过编写C++模块来提供接口,我们就可以实现在不同Isolate间共享同样的资源。用node进行方便的并行操作也将成为可能。
为了实现这个特性,node首先需要让自己更适合多线程环境,所有的全局变量都将被移除,大量的debugging也避免不了。对于编译的C++模块,它们也需要判断自已要为哪个Isolate服务,而且,一个模块到底需要被加载几次,也变得难以判断起来。
同时,当一个Isolate结束时,整个进程并不会结束,node还需要结束掉和这个Isolate相关的I/O,这一点主要通过domains来实现(见上面第四条)。
所以,期待2012吧。
12 回复