我有一个需要运行的操作/任务,这是由一个被触发的事件触发的(我不认为这最后一件事非常重要)。
事实是,这个任务由几个io操作组成,主要是网络调用。此外,我希望以原子方式运行此任务,从头开始结束,一个更新的任务不应该在当前任务完成之前启动。
我通常会使用某种关键部分来做这件事,但我认为在js或节点库lib中没有这样的概念。你怎么建议我应该处理这样的案件?
感谢
编辑:我已经在不同的帖子中多次看到“关键部分不需要,这是单线程”的意见,我认为这只是部分正确,它只适用于同步操作。假设使用关键部分的典型场景,你需要做两件事情A)检查一个条件的有效性,B)只有当A是真或假时才应用一个动作,这个动作会翻转条件。你不希望2个线程得出A同时为假的结论,并且应该完成B,所以你将A和B包装在一个关键部分以使它们成为原子。在node.js中,如果A同步,那么你很好,没有其他线程会运行,你可以安全地做B。但是如果A是异步的,那么在它的回调触发之前,A的另一个事件可能会出现在事件队列中,然后在第一个事件发生之前它被执行。