【问题标题】:When to use multi threading vs multi processsing何时使用多线程与多处理
【发布时间】:2019-11-27 02:19:24
【问题描述】:

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


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

【问题讨论】:

  • 我不确定我是否理解您的问题。如果您的线程共享数据,并且您想避免 IPC,请将它们放在同一个进程中。否则,不同的流程将成为一种选择。
  • 我不清楚何时选择进程而不是线程并希望查看一些示例

标签: c multithreading multiprocessing


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2011-09-17
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    • 2019-09-04
    相关资源
    最近更新 更多