与多线程相比,多处理只是获得更多cpu资源的一种方式吗?



多进程通过将任务分配给多个进程来利用多核CPU。这使得CPU处理"这个程序的任务"。更频繁,因为不同的核心可以加载不同的进程并同时执行。另一方面,我对多线程的理解是,同一进程的不同线程也可以加载到不同的CPU内核中并发运行。所以,如果我们把进程间/线程间通信放在一边,多处理只是一种获得更多cpu资源的方法吗?我在没有完全理解固件/硬件级别发生的情况下使用这两种技术…

假设,我有一个程序处理一堆完全由cpu约束的任务,它们具有相同的主体和不同的参数。这些任务可以完全并行处理。如果我使用多处理(N个进程)与多线程(N个线程)会有什么不同?

当涉及到普通计算机的纯计算能力时,通常在性能上没有区别,它们都是利用多核的方法。(IPC和启动开销除外)

当涉及到HPC(高性能计算)时,多个进程可以为每个进程分配不同的资源,(NUMA集群中的每个NUMA节点都有自己的私有内存),通过减少资源争用(包括内核争用)实现更高的吞吐量,NUMA节点之外,您还可以将每个进程固定在某些核心上,对于时间关键型应用程序,您不能依赖操作系统调度器来优先处理您的进程。并手动管理每个进程的优先级。

在某些系统中,类似的功能可以在线程上完成,但需要对代码进行重大修改,而基于进程的方法更简单,更可移植。

拥有多个进程允许可伸缩性和隔离

  1. 以后你可以让每个进程在不同的计算机上工作,这是通过网络连接的(集群计算)
  2. 你有更好的错误处理,如果一个工作失败或崩溃(kubernetes)
  3. 你可以让每个团队在不同的"流程"上工作;

简而言之,线程是有用的,如果你正在做一个小的计算并发或需要共享地址空间低延迟,但如果你正在做一个应用程序规模的计算,那么最好把它隔离在自己的进程/应用程序,这是大多数模拟器的工作方式,在这样的应用程序中,多处理和多线程并行,所以你有多个进程,每个进程都有自己的多线程。

最新更新