【问题标题】:Why multi-threading is often combined with multiprocessing?为什么多线程经常与多处理结合使用?
【发布时间】:2017-12-27 05:16:07
【问题描述】:
作为一个学校项目,我必须实现一个 http 服务器,所以我查看了现有的 http 服务器架构,然后发现了 worker 多处理模块。
这个模块实现了一个混合的多线程多进程服务器,也就是说,它分叉并且每个分叉的进程产生自己的线程池来处理请求。
这让我想知道,混合多进程多线程程序与仅多线程程序相比有什么优势?为什么不保留一个进程并生成一个更大的线程池?
【问题讨论】:
标签:
multithreading
apache
multiprocessing
【解决方案1】:
可用性。
你的程序有新出现的缺陷,所以最好让一个实例在 M 个线程上崩溃,而不是让它在 N*M 个线程上崩溃。 (N-1)*M 个其他线程可能能够继续运行,并且您可能已经降低了其中任何一个线程崩溃的可能性。
这也被部署为一种处理资源泄漏的技术:在处理 N 个事务后,服务器“执行”本身,这会导致其资源的清理。我很确定 Thompson&Ritchie 没有预见到这会作为 exec 的用例......