首页 > 解决方案 > 何时使用多线程与多处理

问题描述

我想看到一些例子。我知道它们之间的区别(相同的 PID、相同的线程虚拟地址等)。


例如,使用相同的地址是否会限制线程的使用或功能?或者相反,它是否使多处理功能更强大但效率更低?

标签: cmultithreadingmultiprocessing

解决方案


线程的主要优点是,如果它们需要共享数据,除了正确的同步(因为它们之间共享地址空间)之外,别无他法。

相反,如果某些进程需要共享数据,则必须显式设置通信方式(共享内存段、管道、本地套接字...),其使用通常意味着复制数据(即 address_space_1 --> shared segment --> address_space_2,甚至 address_space_1 --[pipe]--> 内核内存 --[pipe]--> address_space_2)。
这些副本可能是性能瓶颈(取决于应用程序上下文)。

但是进程优于线程的一个优点是,如果一个进程被杀死,其他进程可以继续工作(假设它们之间的通信协议足够健壮)。

很久以前可能有人说过,线程调度可能比进程调度更有效,但现在不再是这样了(它可能与用户空间线程有关,而不是与内核线程有关)。


推荐阅读