什么是Node.js隔离?他们为什么现在死了?

时间:2012-02-03 16:23:55

标签: node.js

在0.7.0中,引入了"Experimenetal isolates support" [原文如此]。除了一些模糊的想法,我从来没有理解这一点,他们提供了类似线程的功能,但没有线程问题。也许这对解决Node的调试/错误处理故事很有帮助。

但是,没有人能够解释它们是什么,无论是在博客中还是在前几个谷歌搜索结果中。什么是分离株?他们为什么要介绍给Node?


今天早上,一系列GitHub问题(266226632665以及可能更多)被关闭,评论“隔离已死”。发生了什么?为什么这个被认为是个好主意,从我能说的是0.7的标题功能,死?

3 个答案:

答案 0 :(得分:10)

在此解释:http://groups.google.com/group/nodejs/msg/6b8b8a487d2ab817

在我收到消息之前,Ben刚刚哄我:)

答案 1 :(得分:1)

您可以将Isolate视为V8运行时的独立实例。它有自己的内存管理(GC)。该名称来自Chrome执行引擎,您可以在其中拥有多个选项卡,每个选项卡都有自己的JavaScript环境引擎。每个选项卡(和JS环境)必须彼此“隔离”,因此页面都不能访问另一个页面环境(window.local或window.document)。这就是V8具有Isolate对象的原因,它允许它在多个环境(页面/标签)中并行运行(隔离)。

答案 2 :(得分:1)

以防万一link @isaacs邮报破裂了,这里的内容是:

  

隔离功能旨在使运行成为可能   child_process.fork()在一个线程中,而不是一个完整的过程。的   理由是降低启动新子节点的成本   实例,以及允许使用共享快速传递消息   二进制附件中的内存,同时保留节点的语义   通过将它们保留在完全隔离的v8中来实现child_process   实例。

     

这是一个非常有用的实验,但最终证明   导致节点内部功能过于不稳定,无法证明   在这个时候继续。它需要很多复杂性   被添加到libuv和node中,并且不太可能产生足够的收益   值得投资。

     

我们将回滚已添加到master中的更改   支持隔离,而是专注于域和其他   承诺增加稳定性并简化调试。这个变化   将降落在0.7.3。我们完全有可能决定使用   v8会隔离在某些将来的节点版本中,但它们不会出现在   0.8。

     

如果您热切希望使用此功能,请查找   您对这一决定感到震惊或沮丧,请与我联系   直。我们不是想让任何人陷于困境,我愿意   了解该功能已承诺了一段时间。如果这   给您带来麻烦,让我们找出另一种使用方法   案件处理。

     

倒退从来都不容易,但是做实验意味着   有时会发现您的方向错误。的   我们越早进行更改,就越容易。

     

谢谢。