Child_process 和 Worker Threads 有什么区别?

Abd*_*tah 28 multithreading node.js

我试图了解ThreadingNodeJS 及其工作原理。

目前我的理解是:

集群: -

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

子进程:

  • 也使用不同的可用内核,但它很糟糕,因为它会创建虚拟内存,因为它会花费大量资源来分叉子进程。

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

工作线程:

  • 与子进程相同,但分叉的进程可以使用 bufferArray

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

2)如果我们有 4 个内核和集群/分叉 nodeJS webserver 4 次(每个内核 1 个进程),然后我们使用worker threads(没有可用的内核)会发生什么?

Sud*_*mal 22

您在工作线程下提到了一点,它们在性质上与子进程相同。但实际上他们不是。

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

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

我想以上一点回答了你的第一个问题,为什么线程模型比进程更受欢迎。

第二点:假设处理器一次可以处理 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

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

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

您可以查看此线程以全面了解线程和进程 之间的区别:进程和线程之间有什么区别?

  • @Abdelfattah 如果这是您所问的问题,您能否将答案标记为已接受。 (3认同)
  • 那么你的意思是在“子进程”中它使用另一个核心,因此它不能与主进程/线程共享内存,而“工作线程”在同一个核心上运行,以便它们可以拥有共享内存?我还知道,在给定的进程中,一次只有一个线程会运行,因此根据节点文档“worker_threads 模块允许使用并行执行 JavaScript 的线程”,如果只有一个线程运行,则并行执行代码意味着什么一个瞬间? (2认同)
  • @SudhirDhumal你并没有真正具体回答OP的问题。另外OP再次发表评论澄清,你还没有回应。在阅读这篇文章中的回复时,这一点对我来说是显而易见的。 (2认同)