gpt4 book ai didi

node.js - learnyounode #9 杂耍异步,官方解决方案会崩溃吗?

转载 作者:太空宇宙 更新时间:2023-11-04 00:53:13 25 4
gpt4 key购买 nike

所以我现在正在学习node.js,并且之前做过一些多任务处理,我的概念是异步和多任务处理有很多相似的问题,这让我想到了我的问题。

官方针对这个问题的解决方案是:

  var http = require('http')
var bl = require('bl')
var results = []
var count = 0

function printResults () {
for (var i = 0; i < 3; i++)
console.log(results[i])
}

function httpGet (index) {
http.get(process.argv[2 + index], function (response) {
response.pipe(bl(function (err, data) {
if (err)
return console.error(err)

results[index] = data.toString()
//AREA OF INTEREST START
count++

if (count == 3)
printResults()
//AREA OF INTEREST END
}))
})
}

for (var i = 0; i < 3; i++)
httpGet(i)

请注意“兴趣领域”评论中的部分。难道这里不可能出现竞争条件之类的情况,从而导致 printResults 函数被多次调用吗?

例如,所有三个“end”回调同时到来,每个回调相继执行 count++(因此在任何回调上尚未发生 count == 3 检查,但 count 已增加三次),现在每个回调都会检查 count == 3 条件,这对于所有调用 printResults 三次的情况都是 true

这可能吗,官方解决方案有些缺陷,还是我误解了一些概念?

最佳答案

不,竞争条件对于该代码来说不是问题。回调在单个线程中运行。它们不会同时并行运行。他们将连续运行。

有关回调如何排队以及为什么代码中没有竞争条件的更多信息,您可以选择观看 a great video by Philip Roberts called "What the heck is the event loop anyway?" .

关于node.js - learnyounode #9 杂耍异步,官方解决方案会崩溃吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31353448/

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