我试图了解NodeJS中的Threading
及其工作原理。
目前我的理解是
集群:-
Child_process:
还利用了可用的不同内核,但是这样做很糟糕,因为创建虚拟内存会花费大量资源来分叉子进程。
分叉的进程可以通过事件与主线程通信,反之亦然,但是分叉的进程之间没有通信。
工作线程:
bufferArray
相互通信 1)为什么worker threads
比child process
更好,以及何时应使用它们中的每一个?
2)如果我们有4个核心并且集群/分支的nodeJS Web服务器有4次(每个核心1个进程),然后我们使用worker threads
(没有可用的核心)会发生什么?
答案 0 :(得分:0)
您在工作线程下提到了它们在本质上与子进程相同。但实际上并非如此。
另一方面,进程具有其自己的内存空间,线程使用共享的内存空间。
线程是进程的一部分。进程可以启动多个线程。这意味着在进程下启动的多个线程共享为该进程分配的内存空间。
我想以上几点回答了您的第一个问题,为什么在此过程中首选线程模型?
第二点:可以说处理器一次可以处理4个线程的负载。但是我们有16个线程。然后所有这些都将开始共享CPU时间。
考虑到4个核心CPU,有限线程的4个进程可以更好地利用它,但是当线程数很高时,所有线程将开始共享CPU时间。 (当我说所有线程将开始共享CPU时间时,我没有考虑进程的优先级和美观性,甚至没有考虑同一台计算机上运行的其他进程。)
关于时间分段和CPU负载共享的快速搜索:
本文甚至回答了如何在进程之间进行切换会降低整体性能。
工作线程本质上类似于任何其他编程语言中的线程。
您可以查看此主题以全面了解 线程和进程之间的区别: What is the difference between a process and a thread?