单线程Node.js是“并行运行”的吗?

时间:2018-09-29 13:49:59

标签: node.js

下面的代码段

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

1 个答案:

答案 0 :(得分:0)

所以问题是nodejs不是单线程的。至少在内部不是。是的,它对您来说是单线程的,但本身不是。因此,当您编写代码的第二部分

rl.on('line', (s) => {
    console.log(s)
    rl.close()
})

它不在主线程上运行。它具有一组工作线程,它不给您访问权限而是在内部维护。因此,它具有单独的线程,这些线程实际上为您执行IO。因此输出。这个人解释得很完美-https://www.youtube.com/watch?v=8aGhZQkoFbQ

进一步阅读Javascript eventloop