下面的代码段
rl = require('readline').createInterface({
input: process.stdin
})
rl.on('line', (s) => {
console.log(s)
rl.close()
})
for (i = 0; i < 2e9; i++) {}
console.log(i)
运行它,快速输入几个字符,例如abcd
,然后在Enter
循环结束之前点击for
。由于for
循环占用了主线程,因此我期望的输出将是:
2000000000
abcd
abcd
为什么控制台会在下面显示一些内容?
abcd
2000000000
abcd
答案 0 :(得分:0)
所以问题是nodejs不是单线程的。至少在内部不是。是的,它对您来说是单线程的,但本身不是。因此,当您编写代码的第二部分
时rl.on('line', (s) => {
console.log(s)
rl.close()
})
它不在主线程上运行。它具有一组工作线程,它不给您访问权限而是在内部维护。因此,它具有单独的线程,这些线程实际上为您执行IO。因此输出。这个人解释得很完美-https://www.youtube.com/watch?v=8aGhZQkoFbQ
进一步阅读Javascript eventloop