【问题标题】:Are Node Fibers Blocking?节点光纤是否阻塞?
【发布时间】:2012-07-26 17:38:15
【问题描述】:

如果你在 Node.js 中运行 I/O 密集型任务,比如一些异步数据库操作,使用 node-fibers,它会阻塞吗?

我还没有使用节点光纤 b/c 似乎——如果在处理 HTTP 请求的代码中使用,其中运行了一些长的正常非阻塞 I/O 代码——它现在会阻止访问您的应用程序的其他请求。这是真的还是假的?关于为什么它是真/假的一点细节也会非常有帮助。

【问题讨论】:

    标签: javascript node.js asynchronous io node-fibers


    【解决方案1】:

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

    Fibers 更像是语法糖,它们不会改变 node.js 的异步模型。唯一的区别是纤维正在创建不同的执行堆栈(如果我是正确的),这对普通的 nodejs 异步代码来说是一个轻微的开销。

    【讨论】:

    • Fibers 还保留了可能因回调而丢失的堆栈跟踪
    • 纤维不是语法糖,它们改变了代码的语义。
    • 您可以(理论上)将使用 Fibers 的代码重写为不使用 Fibers 的代码,它不会引入新概念。所以恕我直言,它可以被声明为语法糖,它只是一种编写更好可读性和更短程序的形式。
    • 这是一篇好文章,我偶然发现并愿意分享link
    猜你喜欢
    • 2015-06-25
    • 2016-12-01
    • 2013-11-13
    • 2013-06-16
    • 2015-10-11
    • 2018-01-08
    • 1970-01-01
    • 2020-09-16
    • 2011-04-09
    相关资源
    最近更新 更多