2012-07-28 53 views
3

如果您在Node.js中运行I/O密集型任务,如使用node-fibers使用node-fibers,那么它会阻塞吗?节点光纤是否阻塞?

我还没有使用过节点光纤,但看起来像b/c - 如果用在处理HTTP请求的代码中,其中运行了一些长的通常非阻塞的I/O代码 - 现在它会阻止其他请求访问您的应用。这是真的还是不?关于它为什么是真/假的一点细节也会很有帮助。

回答

1

纤维允许程序员编写“线程”阻塞语句JavaScript代码。但是它的实现不是阻塞的,代码相当于node.js异步事件代码。 Laverdets的实现在某些时候暂停了光纤的执行,就像异步node.js模型一样,并且可以在稍后恢复。

纤维更多的是语法糖,它们不会改变node.js异步模型。唯一的区别是光纤创建不同的执行堆栈(如果我是正确的),这对于正常的nodejs异步代码来说是一个很小的开销。

+0

纤维还保留了回调丢失的堆栈痕迹 – avital 2012-12-12 07:58:36

+2

纤维不是语法糖,它们改变了代码的语义。 – 2014-06-25 16:59:29

+0

您可以(理论上)使用光纤重写代码,以便不使用光纤进行编码,但不会引入新的概念。所以imho可以被声明为语法糖,它只是一种编写更易读和更短程序的形式。 – 2014-06-28 11:25:47