【发布时间】:2016-03-17 19:24:24
【问题描述】:
我有一个需要运行的操作/任务,它由触发的事件触发(我认为最后一件事并不重要)。
问题是,这个任务由几个io操作组成,主要是网络调用。另外,我想原子地运行这个任务,从头到尾,一次一个,新的任务不应该在当前任务完成之前开始。
我通常会使用某种关键部分来执行此操作,但我认为 js 或节点库库中没有这样的概念。你建议我应该如何处理这样的案件?
谢谢
编辑:我在不同的帖子中多次看到“不需要关键部分,这是单线程”的观点,我认为这只是部分正确,它仅适用于同步操作。
假设使用关键部分的典型场景,您需要做 2 件事 A) 检查条件的有效性,B) 仅当 A 为真或假时应用操作,该操作将翻转健康)状况。您不希望 2 个线程同时得出 A 为假的结论,并且 B 应该完成,因此您将 A 和 B 包装在关键部分中以使它们成为原子的。在 node.js 中,如果 A 同步,那么你很好,不会有其他线程在运行,你可以安全地做 B。但是如果 A 是异步的,在它的回调触发之前,A 的另一个事件可能会出现在事件队列上,在第一个事件之前它是 B 执行的。
【问题讨论】:
-
为什么不简单地使用队列?
标签: node.js concurrency critical-section