我试图理解Threading
NodeJS 及其工作原理。
目前我的理解是:
Cluster: -
- 构建在 Child_process 之上,但 TCP 分布在集群之间。
- 最适合分配/平衡传入的 http 请求,但不适合 CPU 密集型任务。
- 通过利用 cpu 中的可用核心来工作,通过在其他核心上克隆 nodeJS Web 服务器实例。
子进程:
工作线程:
- 与子进程相同,但分叉进程可以使用以下方式相互通信
bufferArray
1) Why worker threads
比child process
我们什么时候应该使用它们?
2)如果我们有 4 个核心,并且集群/分叉 NodeJS Web 服务器 4 次(每个核心 1 个进程),那么我们使用worker threads
(没有可用的核心)?
您在工作线程下提到了一点,它们本质上与子进程相同。但实际上并非如此。
另一方面,进程有自己的内存空间,线程使用共享内存空间。
线程是进程的一部分。进程可以启动多个线程。这意味着在进程下启动的多个线程共享为该进程分配的内存空间。
我想上面的观点回答了你的第一个问题,为什么线程模型比进程更受青睐。
第二点:假设处理器一次可以处理 4 个线程的负载。但我们有 16 个线程。然后他们都会开始共享CPU时间。
考虑到 4 核 CPU,4 个线程有限的进程可以更好地利用它,但当线程数很高时,所有线程将开始共享 CPU 时间。 (当我说所有线程将开始共享 CPU 时间时,我没有考虑进程的优先级和良好性,甚至没有考虑同一台计算机上运行的其他进程。)
我关于时间切片和 CPU 负载共享的快速搜索:
- https://en.wikipedia.org/wiki/分时 https://en.wikipedia.org/wiki/Time-sharing
- https://www.tutorialspoint.com/operating_system/os_process_scheduling_qa2.htm https://www.tutorialspoint.com/operating_system/os_process_scheduling_qa2.htm
本文甚至回答了进程之间的切换如何降低整体性能。
工作线程本质上与任何其他编程语言中的线程相似。
您可以查看此线程以总体了解
线程和进程的区别:进程和线程有什么区别? https://stackoverflow.com/questions/200469/what-is-the-difference-between-a-process-and-a-thread?rq=1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)