Apache 多任务并发处理

来源:互联网 发布:深圳网络股东大会投票 编辑:程序博客网 时间:2024/05/16 00:26

1.  基本简介

(1) 我们知道操作系统早就实现了并发机制,则充分利用操作系统的并发机制提高服务器的单机运行效率是服务器开发者不断追求的目标。但是,因为不同的操作系统平台和计算机硬件的差别使得并发模型没有一个通用的规则,在很多平台上非常优秀的并发模型换到另一个平台上就变成性能很差;另外同一个系统平台但是执行的任务不同,同一个并发模型的并发性能也有很大差异;所以并发的性能的影响因素包括:

  • 操作系统平台
  • 服务器跑的任务

(2) Apache 是用C语言开发的,所以入口是一个main主程序,主程序一旦调用MPM模型中的ap_mpm_run函数后,就进入了多进程并发处理状态,为了并发处理客户端的请求,Apache会产生多个进程,而每个进程又会产生多个线程.

Aapche提供了多个并发模型:

  • prefork:一般用于Unix操作系统,基于进程的并发,以进程为一个处理client请求的基本单位;有多个子进程(但没有线程);一般Linux系统会默认次并发模型
  • worker:新的MPM,同事使用了线程和进程,效率比单纯使用进程的Prefork MPM要高(既有进程、也有线程)
  • WinNT :适用于windows系统平台,以线程作为处理client请求的基本单位

(3) MPM的主要任务

MPM的主要任务是创建进程或线程并对它们进行管理,包括在空闲的时候终止多余的进程或线程,以及在忙碌的时候启动更多的进程和线程;另外一个任务是在套接字上(socket)上监听客户端的请求,当请求到达时,MPM将把它派发给创建好的进程和线程,继而进入请求处理阶段(每一个进程或线程将自始至终只负责一个客户端的请求)

 

(4) MPM并发模型中用进程、线程作为处理请求的基本单位的优缺点:

  • 进程的优点:进程之间是相互独立的,所以一个进程出现问题不影响其他的进程处理请求
  • 进程的缺点:具有比较大的上下文切换(上下文切换次数多),会影响进程之间切换的时间
  • 线程与进程相比就属于轻量级的,线程之间切换时间也比较少;更重要的优点是线程之间可以恭喜大部分上下文,方便彼此之间通信;
  • 线程的缺点:不稳定,如果一个线程崩溃,则其余的线程也会随之崩溃

(5) MPM 数据结构

  1. 计分板(SoreBoard):

          计分板类似于共享内存,主要用于父子进程之间的数据交换,任何一方可以将对方需要的信息写入计分板,同事任何一方都可以在计分板上获取自己需要的信息;

         MPM一个重要的任务是在空闲时关闭多余的进程,在繁忙时开启更多的进程或线程;子进程和子线程把自己的状态记录到计分板上,父进程到计分板读取信息,然后通过终止管道对一部分子进程下达关闭命令。

     2.  终止管道(Pipe of Death)

         主进程通过终止管道向子进程、子线程下达命令,让他们关闭,也是单方向通信的;父进程把关闭命令写到终止管道的一端,子进程或子线程会时时监听终止管道,监听到父进程发送命令后会到终止管道的另一端读取命令,如果是终止命令,则子线程会自动关闭。

         管道的特点:管道是用来不同进程之间进行通信的

  • 管道是半双工通信,数据只能在一个方向上流动,在进行双向通信时需要建立两个管道,分别用于不同的方向
  • 管道通常用于父子进程或兄弟进程等具有血缘关系的进程进程通信
  • 管道本质:管道是一个文件,他/它并不属于某种特定文件系统,是自立门户,单独构成一个文件系统,并且只存在于内存中;当进程写入数据时,所有的数据都添加到管道缓冲区的末尾,而读取时是从缓冲区的头部读取,所有的数据只能读一次,一旦读取,数据会丢失。

   (6) Apache 优雅启动

     Apache允许在不完全终止Apache的情况下重启Apache,当Apache重启时,其主程序将退出,但它产生的子进程或线程仍继续运行,直到请求处理结束。

     当Apache启动后会重新建立一个主程序,然后会创建一下子进程,它们之间是父子关系的;但Aapche关闭前的子进程与这个父进程没有血缘关系,所以在执行完client请求后会字段关闭。

原创粉丝点击