HTTP 并发响应模型
httpd: MPM 并发响应模型
prefork(select 1024个并发), worker, event
1、穿行响应模型
2、多进程模型,主控进程负责接收链接(监听端口),主控进程fork一个子进程进行通信,子进程占用一个句柄。启动的子进程数量有限,fork的进程需要预先提供好,所以叫prefork。
3、worker模型,线程模型响应,主控进程fork一个子进程(可以由多个自己进程),子进程内部有多个线程去响应链接。
4、event,事件驱动模型,
I/O模型
1、同步 synchronous 一个任务的完成需要依赖于另一个任务时,需要被依赖的任务完成,依赖的才能完成。可靠的任务序列,两个任务可以保持一致,要么都完成要么都失败。
异步:asyncrhonous 调用者无须等待被调用者,只是通知被依赖者,依赖着还会继续执行后面的任务,无须等待被依赖着任务进度。
两者的消息通知机制不同,被调用者响应的方法有两种:
同步:等待对方返回消息,
异步:被调用者通过状态、通知或者回调机制,让调用者得到结果。
状态:通过轮询来查看状态。盲等。
通知:被条用者完成后会通知调用者完成。
回调:外表和通知差不多。
调用结果返回之前,调用者的状态有两种:
阻塞:block :调用结果返回之前,调用者挂起。
非阻塞:nonblock: 调用结果返回之前,调用者不会被挂起。
I/O类型:
网络IO:本质是socket读取:
磁盘IO:流
每次IO都经由两个阶段:
第一步:数据先加载至内核内存空间,可以是阻塞或者非阻塞
第二步:数据从内核缓冲区复制到用户空间的进程内存中去;这个步骤一定是阻塞的
数据复制两个阶段
等待数据准备完成
数据内核复制到进程
I/O模型:
同步阻塞:阶段一,阶段二都挂起
同步非阻塞:阶段一盲等,阶段二挂起
I/O 复用: 第一阶段阻塞在io复用,第二阶段阻塞在内核。select机制最多1024个并发,poll
信号驱动IO:第一阶段解脱出来,第二阶段阻塞
异步IO:阶段一,阶段二都飞阻塞