multithreading - 为什么多线程经常与多处理结合使用?

标签 multithreading apache multiprocessing

作为一个学校项目,我必须实现一个 http 服务器,所以我查看了现有的 http 服务器架构,然后发现了 worker 多处理模块。

该模块实现了一个混合多线程多进程服务器,即它 fork 并且每个 fork 的进程产生自己的线程池来处理请求。

这让我想知道,混合多进程多线程程序与仅多线程程序相比有什么优势?为什么不保留一个进程并产生一个更大的线程池?

最佳答案

可用性。

你的程序有新生的缺陷,所以最好让一个实例用 M 个线程崩溃,而不是让它用 N*M 个线程崩溃。 (N-1)*M 个其他线程可能能够继续运行,并且您可能已经降低了其中任何一个线程崩溃的可能性。

这也被部署为一种处理资源泄漏的技术:在处理 N 个事务后,服务器“执行”本身,这会导致其资源的清理。我很确定 Thompson&Ritchie 没有预见到它会作为 exec 的用例......

关于multithreading - 为什么多线程经常与多处理结合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47978862/

相关文章:

c++ - 在类中创建新线程(windows)

linux - Pthreads 作为 UNIX 中同时控制台输入的标准解决方案?

apache - 将 Apache 配置为 ASP.NET Core 非 SSL 应用程序的 HTTPS 反向代理是否存在安全问题?

java - 适用于大型项目的 Apache.Httpd+Php 或 Apache.Tomcat+Java

Python:当 KeyboardInterrupt 被转发到多处理子进程时?

python - 如何一起使用多处理池和队列?

python - 在 iter 上并行化循环

Java线程安全写入xml文件?

c# - 在另一个线程中调用函数是否安全?

java - 当 JAVA_HOME 指向 JRE 1.8 时,无法使用 activemq-admin.bat 停止 JMS 代理