JS如何既非阻塞/异步又是单线程的?

fuz*_*nny 2 javascript concurrency asynchronous conceptual

我无法想象Javascript如何既可以是单线程又可以在客户端上不阻塞。我一直在想像流水线:

  • 在代码执行开始时,您只有一条装配线,将不同的零件组装到汽车上。

  • 达到完工率的20%时,需要添加引擎,但是尚未组装引擎。

  • 而不是等待引擎组装,组装线被分解成两条组装线-两个螺纹,对吗?

  • 1号线继续组装汽车的其他零件。

  • 2号线开始组装发动机。

  • 2号线完成引擎的组装后,将返回1号线并添加引擎。

  • 根据发动机的组装速度,此时1号线的完工率为30%,完工率为99%,依此类推。

这就是我设想的非阻塞,异步代码的方式。1号线的主线程可以继续前进,而不必等待2号线先完成。但是这种组装线的隐喻需要两条组装线或两个线程,但是JS是单线程的。

所以现在我很困惑。

Shi*_*lly 5

简而言之,运行时具有一个事件循环,可以在1个线程中模拟异步。总之,我发现这段视频和文字是一个很好的解释:http : //2014.jsconf.eu/speakers/philip-roberts-what-the-heck-is-the-event-loop-anyway.html