在NodeJs中实现关键部分的正确方法

我有一个操作/任务,我需要运行,这是由一个事件被触发(我不认为这最后一件事情是非常重要的)触发。

事情是,这个任务主要由几个io操作,networking调用组成。 另外,我想以primefaces的方式运行这个任务,开始到结束,当时一个新的任务不应该开始,直到当前的任务完成。

我通常会使用某种types的关键部分来做到这一点,但我不认为js或节点库lib中存在这样的概念。 你如何build议我应该处理这样的情况?

谢谢

编辑:我已经看到了“不需要关键的部分,这是单线程”的意见多次在不同的职位,我认为这只是部分正确的,它只适用于同步行动。

假设使用关键部分的典型场景,你需要做2件事情A)检查一个条件的有效性,B)只有当A是真或者假时,才会应用一个动作,这个动作会翻转条件。 你不希望2个线程得出A同时为假,B应该完成的结论,所以你把A和B包装在关键部分,使它们成为primefaces。 在node.js中,如果A同步,那么你很好,没有其他线程将运行,你可以安全地做B。 但是如果A是asynchronous的,在callback触发之前,A的另一个事件可能会出现在事件队列中,在第一个事件被执行之前。

由于Node本身在单线程环境下运行,因此不需要关键部分。 通常对这种types的东西(Async,Bluebird,Q)使用不同types和风味的控制stream库。

由于mscdex指出一个队列将是可取的,asynchronous队列() ,将能够处理你描述的情况。 为了保证“临界区”的感觉,只需为队列设置concurrency: 1

Interesting Posts