一个Node.js线程是否会阻止另一个?

一个Node.js线程是否会阻止另一个?,node.js,Node.js,使用Node.js和一个单CPU虚拟实例,如果我将一个工作线程和一个web线程放在同一个节点上,其中一个会阻止另一个吗?我需要两个CPU才能让它们完美地并行运行吗?是的,如果都是同步代码,一个CPU会阻塞另一个CPU 由于您只有一个虚拟CPU实例(假设没有超线程),因此在核心级别,CPU只以同步方式接收指令:1、2、3、4 因此,理论上,如果一个工人有这样的东西,它会阻止: while (true) { doSomething(); } 免责声明:我不确定操作系统内核是否会处理与阻塞指

使用Node.js和一个单CPU虚拟实例,如果我将一个工作线程和一个web线程放在同一个节点上,其中一个会阻止另一个吗?我需要两个CPU才能让它们完美地并行运行吗?

是的,如果都是同步代码,一个CPU会阻塞另一个CPU

由于您只有一个虚拟CPU实例(假设没有超线程),因此在核心级别,CPU只以同步方式接收指令:1、2、3、4

因此,理论上,如果一个工人有这样的东西,它会阻止:

while (true) {
    doSomething();
}
免责声明:我不确定操作系统内核是否会处理与阻塞指令有关的任何事情

但是,Node.js运行事件循环中的所有I/O,以及您明确声明要在事件循环进程中运行的任务。nextTick,setTimeout。。。。事件循环的工作方式已经很好地解释了,所以我不会详细介绍-但是,Node.js唯一的阻塞部分是同步运行代码,如上面的示例所示

因此,长话短说:由于您的web worker使用Node.js,并且http模块是一个异步模块,因此您的web worker不会阻塞。由于您的工作线程也使用Node.js,因此假设它执行在访问您的网站时发生事件时启动的代码,例如,它不会阻止


要完美地并行运行同步代码,需要两个CPU。但是,假设它是异步的,它应该在一个CPU上正常工作。

工作线程和web线程是什么意思?它们只是两个单独的node.js进程。一个只是处理,另一个提供web请求。