首页 > 解决方案 > 单线程nodejs“并行”运行?

问题描述

下面的代码片段,

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

标签: node.js

解决方案


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

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

它不在主线程上运行。它有一组工作线程,它不给你访问权限,而是在内部维护。所以它有单独的线程,实际上为你做 IO。因此输出。这家伙解释得非常完美 - https://www.youtube.com/watch?v=8aGhZQkoFbQ

进一步阅读Javascript 事件循环


推荐阅读