Child_process和Worker Thread之间有什么区别?

时间:2019-05-26 10:28:43

标签: node.js multithreading

我试图了解NodeJS中的Threading及其工作原理。

目前我的理解是

集群:-

  • 建立在Child_process之上,但TCP在群集之间分布。
  • 最适合分配/平衡传入的HTTP请求,而最不适合CPU密集型任务。
  • 通过利用cpu中可用的内核,通过在其他内核上克隆nodeJS Web服务器实例来工作。

Child_process:

  • 还利用了可用的不同内核,但是这样做很糟糕,因为创建虚拟内存会花费大量资源来分叉子进程。

  • 分叉的进程可以通过事件与主线程通信,反之亦然,但是分叉​​的进程之间没有通信。

工作线程:

  • 与子进程相同,但是分叉​​的进程可以使用bufferArray相互通信

1)为什么worker threadschild process更好,以及何时应使用它们中的每一个?

2)如果我们有4个核心并且集群/分支的nodeJS Web服务器有4次(每个核心1个进程),然后我们使用worker threads(没有可用的核心)会发生什么?

1 个答案:

答案 0 :(得分:0)

您在工作线程下提到了它们在本质上与子进程相同。但实际上并非如此。

另一方面,进程具有其自己的内存空间,线程使用共享的内存空间。

线程是进程的一部分。进程可以启动多个线程。这意味着在进程下启动的多个线程共享为该进程分配的内存空间。

我想以上几点回答了您的第一个问题,为什么在此过程中首选线程模型?

第二点:可以说处理器一次可以处理4个线程的负载。但是我们有16个线程。然后所有这些都将开始共享CPU时间。

考虑到4个核心CPU,有限线程的4个进程可以更好地利用它,但是当线程数很高时,所有线程将开始共享CPU时间。 (当我说所有线程将开始共享CPU时间时,我没有考虑进程的优先级和美观性,甚至没有考虑同一台计算机上运行的其他进程。)

关于时间分段和CPU负载共享的快速搜索:

  1. https://en.wikipedia.org/wiki/Time-sharing
  2. https://www.tutorialspoint.com/operating_system/os_process_scheduling_qa2.htm

本文甚至回答了如何在进程之间进行切换会降低整体性能。

工作线程本质上类似于任何其他编程语言中的线程。

您可以查看此主题以全面了解 线程和进程之间的区别: What is the difference between a process and a thread?