一、概述
使用进程池,半同步/半异步并发模式。
同步进程:工作子进程负责进行具体的连接以及具体的I/O,顺序执行
异步进程:主进程监听连接事件,将连接任务分发给子线程
二、设计逻辑
1.设计进程池的创建逻辑
2.父进程监听:
- 连接事件。处理:向子进程发送通知,让子进程接受连接
- 信号管道(信号)。处理:执行对应的操作
3.子进程监听:
- 与父进程的通信管道(连接事件)。处理:接受连接
- 信号管道(信号)。处理:执行对应的操作
- 其他读事件(客户请求)。处理:调用逻辑处理对象对应的处理函数。
4.设计逻辑处理类的事件处理函数
- 读取度缓冲区数据,解析数据,执行对应的CGI程序
5.设计主函数
三、代码逻辑
1.创建网络连接socket并监听之
2.创建并初始化进程池
3.父子进程循环监听并处理事件(Reactor模式)
4.当父进程收到SIGINT信号或SIGTERM信号,向所有子进程发送SIGTERM信号
5.子进程收到SIGINT信号或SIGTERM信号,终止循环,从 main
函数返回,正常终止。操作系统向其父进程发送 SIGCHLD
信号,通知父进程子进程已经终止。
6.父进程收到 SIGCHLD
信号,进行对应子进程的退出收尾工作。
7.确认所有子进程都退出后,父进程也退出循环。