代码之家  ›  专栏  ›  技术社区  ›  sof

单线程nodej“并行”运行?

  •  0
  • sof  · 技术社区  · 7 年前

    下面的代码片段,

    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 循环结束。自从 对于 循环占用主线程,我原本期望的输出是:

    2000000000
    abcd
    abcd
    

    为什么控制台会显示下面的内容?

    abcd
    2000000000
    abcd
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Raj Kumar    7 年前

    所以nodejs不是单线程的。至少在内部不是这样。是的,它是单线程的,但本身不是。所以当你写代码的第二部分时

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

    它不会在主线程上运行这个。它有一组工作线程,不提供访问权限,但在内部维护。所以它有单独的线程来为你做IO。因此产生了输出。这家伙解释得很清楚- https://www.youtube.com/watch?v=8aGhZQkoFbQ

    供进一步阅读 Javascript eventloop

    推荐文章