c - 何时使用多线程与多处理
问题描述
我想看到一些例子。我知道它们之间的区别(相同的 PID、相同的线程虚拟地址等)。
例如,使用相同的地址是否会限制线程的使用或功能?或者相反,它是否使多处理功能更强大但效率更低?
解决方案
线程的主要优点是,如果它们需要共享数据,除了正确的同步(因为它们之间共享地址空间)之外,别无他法。
相反,如果某些进程需要共享数据,则必须显式设置通信方式(共享内存段、管道、本地套接字...),其使用通常意味着复制数据(即 address_space_1 --> shared segment --> address_space_2,甚至 address_space_1 --[pipe]--> 内核内存 --[pipe]--> address_space_2)。
这些副本可能是性能瓶颈(取决于应用程序上下文)。
但是进程优于线程的一个优点是,如果一个进程被杀死,其他进程可以继续工作(假设它们之间的通信协议足够健壮)。
很久以前可能有人说过,线程调度可能比进程调度更有效,但现在不再是这样了(它可能与用户空间线程有关,而不是与内核线程有关)。
推荐阅读
- c++ - 在 .cc 源文件中设置为默认值时,移动构造函数和移动赋值运算符抛出错误
- java - 我想让用户输入并打印平均使用的字母数量和最长的名字
- vuetify.js - vuetify 路由器链接不适用于抽屉儿童
- powershell - “远程服务器返回错误:(407) 需要代理身份验证。” 在 Azure Devops 中注册部署组时出错
- konvajs - 如果 Konva 不可见,toDataURL() 返回一个空白图像
- django - 重命名 Django 超类模型并正确更新子类指针
- python - 在 Flask 会话中保留上传数据以进行分析
- amazon-web-services - 用于不同域的两个不同负载均衡器
- git - 为什么我的 HEAD ref 无法在 git 上运行?
- python - 如何在 Python 中创建无符号字符数组?(对于使用 PyOpenGL 的 glReadPixels)