gpt4 book ai didi

node.js - 在管理器/ worker 模式中使用子进程以确保线程安全时,Node.js 中是否需要锁定?

转载 作者:行者123 更新时间:2023-12-03 13:17:08 25 4
gpt4 key购买 nike

我正在为 Node.js 编写一个简单的、基于消息的管理器/ worker (http://lya.fciencias.unam.mx/jloa/patrones/MW.html) 模块。通常,在多线程环境中,修改数据的代码需要锁定以防止其他线程在例程中更改数据,从而导致困惑的竞争条件。例如:

function assignWork(job) {
if (!this.isWorkComplete && this.workerQueue.length != 0) {
this.workerQueue.pop().runJob(job);
}
}

上面的代码,在多线程环境中,需要一个锁,因为在这个线程检查它是否被填充的时间和它将工作人员从队列中弹出的时间之间,另一个线程可能会清空工作队列,导致错误。

然而,据我了解,由于 Node 使用单个事件队列,同步代码不可能出现上述问题,因为一次只执行单个线程。

这个假设正确吗?此外,如果它对 Node 是正确的,是否存在其他使用多个线程并且需要锁定机制来确保线程安全的实现?

最佳答案

来自 the Node 6.0.0 documentation :

A single instance of Node.js runs in a single thread. To take advantage of multi-core systems the user will sometimes want to launch a cluster of Node.js processes to handle the load.



Javascript 是单线程的,因此在任何当前正确的 javascript 引擎中都不存在线程安全问题。

到目前为止,我们在 Javascript 中拥有的唯一真正的多线程是 Web worker 。它们使用消息传递进行通信,因此它们不共享内存(至少对 javascript 开发人员不可见;引擎可能)。

在单线程环境中,竞态条件仍然很有可能。回调可能很棘手。

关于node.js - 在管理器/ worker 模式中使用子进程以确保线程安全时,Node.js 中是否需要锁定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36900052/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com