Web服务器如何处理多个请求?–从fork到pre-fork到多线程

  • Post author:
  • Post category:其他


有多个方面的设计思想:

  1. 服务器中有一个主进程绑定80端口并监听。当收到一个连接请求,就调用fork()系统调用,所得到的子进程会读这个请求并返回一个响应,然后终止。这是传统的网络服务模型,缺点是子进程可能会很慢,因为虽然fork是一个低开销的调用,但当服务器负载增加时其开销也跟着增大
  2. Apache引入了“pre-forking”(预先派生子进程)模式,预先派生子进程是让服务器在启动阶段调用fork创建一个子进程池。每个客户请求由当前可用子进程池中的某个闲置子进程处理。优点是节省了临时fork的开销,缺点是父进程在启动阶段要先知道预先派生的子进程数,如果连接较多而无可用子进程,那么客户请求超过了连接排队数就可能会被忽略
  3. 接着是多线程模型。这个和预派生子进程差别不大,唯一的区别也就是它是使用线程而不是fork。



版权声明:本文为qq_43527718原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。