我希望看到一些例子。我知道它们之间的差异(相同的PID,相同的线程虚拟地址等)。
例如,使用相同的地址会限制线程的使用或能力吗?还是相反,它会使多处理功能更强大但效率更低吗?
答案 0 :(得分:4)
线程的主要优点是如果它们需要共享数据,除了正确的同步(因为它们之间共享了地址空间)之外,别无他法。
相反,如果某些进程需要共享数据,则必须显式设置一种通信方式(共享内存段,管道,本地套接字...),其使用通常意味着复制数据(例如,address_space_1->共享段-> address_space_2,
甚至address_space_1-[pipe]->内核内存-[pipe]-> address_space_2)。
这些副本可能是性能瓶颈(取决于应用上下文)。
但是进程相对于线程的优势是,如果一个进程被杀死,则其他进程可以继续工作(假设它们之间的通信协议足够健壮)。
很久以前就已经说过,线程调度可能比进程调度更有效,但事实并非如此(它可能与用户空间线程有关,与内核线程无关)。