当前位置 : 主页 > 网页制作 > Nodejs >

node.js – 在NodeJ中实现关键部分的正确方法

来源:互联网 收集:自由互联 发布时间:2021-06-16
我有一个我需要运行的操作/任务,这是由一个被触发的事件触发的(我不认为这最后一件事非常重要). 事实上,这个任务由几个io操作组成,主要是网络调用.另外,我想原子地运行这个任务
我有一个我需要运行的操作/任务,这是由一个被触发的事件触发的(我不认为这最后一件事非常重要).

事实上,这个任务由几个io操作组成,主要是网络调用.另外,我想原子地运行这个任务,从头开始结束,一个新的任务不应该开始直到当前的任务结束.

我通常会使用某种关键部分来做这件事,但我认为在js或节点库lib中没有这样的概念.你怎么建议我应该处理这样的案件?

谢谢

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

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

由于Node本身在单线程环境中运行,因此不需要关键部分.不同类型和风格的控制流程库通常用于此类事物(Async,Bluebird,Q).

正如mscdex所说,队列会更好,Async有queue()可以处理你描述的场景.为了保证’关键部分’感觉只是设置并发:队列为1.

网友评论