据我所知,基于事件循环的应用程序有一个始终在运行的线程。我很想知道它们在单CPU机器上的行为。
编辑:这不是专门针对node.js应用程序的。我曾经看到用Java编写的应用程序实现了一个事件循环,其中一个线程在无限循环中运行。
这是不对的。在node.js之类的东西中,基于事件的线程只有在实际有一些事件要服务并且有一些事件处理程序要为该事件运行时才运行。大多数时候,线程是空闲的,只是等待下一个事件触发它再次运行,而不是在空闲时使用CPU周期。因此,它使用的CPU不会超过代码实际执行的时间。
根据系统的不同,也可能有一些管家任务偶尔也会使用一些CPU(如垃圾收集),但这些任务也会完成它们的工作,然后再次空闲。
此外,与讨论相关的是node.js在单个线程中运行所有Javascript,但它也可能使用其他线程来实现各种库函数(例如文件I/O)。实际上,它有一个内部线程池,供库的某些部分使用。