node v0.8 Roadmap详解
发布于 3年前 作者 fool 3905 次浏览

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 回复

俺已经在项目中使用Isolate了~~

希望能把cygwin support做的好一点。

Node已经可以直接在windows下原生运行了。不需要cygwin了。如果你喜欢linux命令,就到linux下去玩node吧。

Isolate已经被移除了。

跪求楼主把“Javascript里有个C”系列写完。。。。。

希望node可以一直进步,更多人来参与社区建设,虽然我不指望靠node来养家糊口,但我真心喜欢node!

me too…对node的兴趣越来越浓了~~

并行支持再发展,就得学 oracle 那样对数据修改都上锁,提交或回滚后才能再次访问。

这些在线程间共享的数据,不就成了一种支持并发访问的内存数据库了吗。

回到顶部