Node.js如何在资源有限的系统上安排工作人员

Node.js如何在资源有限的系统上安排工作人员,node.js,worker,worker-thread,Node.js,Worker,Worker Thread,我想知道如何充分利用nodejs中的Worker类,特别是在1或2 cpu系统上,任务调度是否比我在常规nodejs程序中阻塞for循环(不使用任何Worker api)更好?他们只是委托给操作系统吗 还有,我可以在工人里面堵住吗?我想这就是他们的目的 Node.js如何在资源有限的系统上安排工作人员 Nodejs工作线程使用底层操作系统线程,因此工作线程由操作系统调度,而不是由Nodejs调度。如果活动线程多于CPU内核,则底层操作系统将在活动线程之间对内核进行时间切片(例如共享)。一般来说,

我想知道如何充分利用nodejs中的Worker类,特别是在1或2 cpu系统上,任务调度是否比我在常规nodejs程序中阻塞for循环(不使用任何Worker api)更好?他们只是委托给操作系统吗

还有,我可以在工人里面堵住吗?我想这就是他们的目的

Node.js如何在资源有限的系统上安排工作人员

Nodejs工作线程使用底层操作系统线程,因此工作线程由操作系统调度,而不是由Nodejs调度。如果活动线程多于CPU内核,则底层操作系统将在活动线程之间对内核进行时间切片(例如共享)。一般来说,您不应该在主nodejs事件循环线程中编写blocked for循环,但是关于这部分问题的更多细节,我们需要了解您正在谈论的实际代码,确切的上下文是什么,以及备选方案是什么

还有,我可以在工人里面堵住吗?我想这就是他们的目的

是的,你可以。它不会对主事件循环线程产生任何不利影响。当然,当工作线程被阻塞时,您将无法在该线程中执行任何其他操作。另外,您可能想知道NodeJ中的工作线程不是轻量级的(就内存使用而言)。每一个都有一个单独的V8解释器环境。因此,在低资源系统中,您必须非常仔细地规划内存使用情况,因为nodejs+多个工作线程不适合低内存使用情况

请记住,每个V8解释器实例还为libuv引擎创建自己的线程池,以用于加密操作和文件操作,从而允许阻止操作系统系统调用,从而向JS引擎提供异步接口。因此,除了Javascript线程之外,在一些NodeJSAPI中还涉及这些libuv线程

Node.js如何在资源有限的系统上安排工作人员

Nodejs工作线程使用底层操作系统线程,因此工作线程由操作系统调度,而不是由Nodejs调度。如果活动线程多于CPU内核,则底层操作系统将在活动线程之间对内核进行时间切片(例如共享)。一般来说,您不应该在主nodejs事件循环线程中编写blocked for循环,但是关于这部分问题的更多细节,我们需要了解您正在谈论的实际代码,确切的上下文是什么,以及备选方案是什么

还有,我可以在工人里面堵住吗?我想这就是他们的目的

是的,你可以。它不会对主事件循环线程产生任何不利影响。当然,当工作线程被阻塞时,您将无法在该线程中执行任何其他操作。另外,您可能想知道NodeJ中的工作线程不是轻量级的(就内存使用而言)。每一个都有一个单独的V8解释器环境。因此,在低资源系统中,您必须非常仔细地规划内存使用情况,因为nodejs+多个工作线程不适合低内存使用情况

请记住,每个V8解释器实例还为libuv引擎创建自己的线程池,以用于加密操作和文件操作,从而允许阻止操作系统系统调用,从而向JS引擎提供异步接口。因此,除了Javascript线程之外,在一些NodeJSAPI中还涉及这些libuv线程