【问题标题】:processing the next event in Node.js在 Node.js 中处理下一个事件
【发布时间】:2013-04-24 05:04:21
【问题描述】:

对于每个请求可能需要一两秒的应用程序,是否可以在事件循环的每次迭代中只处理一段可操作的代码? 例如:

function foo()
{
    ...operative code...
    ...start processing the next event here...
    ...continue with foo() here....
}

会是这样吗?

function foo()
{
    ...operative code...
    process.nextTick(function() {
        ...continue with foo() here...
    });
}

如果这样做,Node 会自动开始处理队列中的下一个事件吗?

【问题讨论】:

  • 你的操作代码是基于IO的吗?通常当我有东西运行一两秒时,主要是 IO 时间。如果是这种情况,则节点将自动处理并发,因为它的 IO 模型是非阻塞的。
  • @tilleryj 假设它不是基于 IO 的,有没有办法跳转到下一个事件并稍后返回继续处理?
  • @tilleryj 我意识到非 IO 函数需要大量代码才能花费一秒钟以上。但我真的只是想了解事件循环是如何工作的,以及我对它有多少控制权。

标签: javascript node.js callback eventqueue


【解决方案1】:

如果时间花在IO上,节点的非阻塞模型会自动处理并发。

如果它没有花在 IO 上,那么您使用 process.nextTick 来推迟代码的执行是正确的,以便其他请求有待处理的更改。这是一篇很好的文章:

http://howtonode.org/understanding-process-next-tick

【讨论】:

  • 谢谢。另外,节点的所有 IO 调用都是顺序的吗?假设我有类似db.query(query, callback1); db.query(anotherQuery, callback2); 的东西。 callback1 总是会先被调用吗?
  • 没有。它们将按照查询返回的顺序被调用。
  • 但是如果两个调用都涉及写入磁盘呢?也许这样的事情会更好地说明我的问题,file.write(somethingLong,callback1); file.write(somethingShort,callback2);。在这种情况下,callback1 不是总是首先被调用吗?
  • 不确定。但是 fs.write 的文档说你不应该在同一个文件上多次调用 write 而不等待回调:nodejs.org/api/…
【解决方案2】:

您的假设是正确的,您应该将工作划分为更小的执行块,并使用process.nextTick 安排下一个块。所有其他需要在下一个订单号执行的计划事件将在您的所需执行块之前处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多