gpt4 book ai didi

javascript - async.auto 中的竞争条件

转载 作者:太空宇宙 更新时间:2023-11-04 01:05:54 26 4
gpt4 key购买 nike

我正在使用async.each,如下所示:

async.each(students, plan(student, callback), function(err) {
.....
.....
});
plan(student, callback){
......
......
commonDS[student.id] = student.name;
}

这里 commonDS 是跨函数调用的公共(public)数据结构,那么这里是否存在竞争条件?

最佳答案

简短回答:可能不会。

更长的答案:Node.js 是单线程的,因此每个同步代码块都是原子的。特别是没有线程,实际上没有并发(一切都按顺序运行)。因此,同步代码块上不存在竞争条件。

虽然总体上存在竞争条件。例如,假设您有 commonDS 字典。现在,您发出异步请求来加载数据X,并且执行commonDS[key] = X。然后,对于该 X,您发出另一个异步请求(加载其他数据)并执行 commonDS[key].my_attr = Y。你这里有一个竞争条件。这是因为您不知道要更改哪个 X 对象(因为您已经链接了异步请求)。您最终可能会得到错误填充的对象。

因此,为了确保我们需要知道 async.each 中发生了什么(或者通常其他地方)。

请注意,Node.js 中没有锁对象,因此如果您需要它,您可以自己实现它(这并不困难,因为 Node.js 是单线程的)或使用现有的库之一。

关于javascript - async.auto 中的竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23075067/

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