进程池
父进程的实现流程
1、定义数据结构pChild,申请子进程数目的结构体空间
2、通过循环,socketpair创建全双工管道,创建子进程,将子进程pid,管道对端,是否忙碌等信息存储
3、socket,bind,listen,对应的端口处于监听状态 netstat
4、epoll_create创建epfd,监控socketFd和所有子进程的管道对端
5、while(1)循环 epoll_wait等待客户端的请求及子进程是否有通知
如果socketFd可读,说明是客户端有连接请求,accept对应连接请求,得到new_fd,循环遍历,找到非忙碌的子进程,将new_fd发送给对应子进程,将对应子进程标识为忙碌,然后父进程关闭new_fd。
判断就绪的描述符 是哪个子进程的管道对端,就将对应子进程标识为非忙碌,同时读出管道内数据。
子进程的实现流程
while(1)
{
1、接收任务,得到newFd
2、通过newFd给客户端发送文件
3、关闭newFd
4、通过写管道,通知父进程完成文件下载任务
}
详细代码见下篇。
Linux网络编程——进程池实现过程详解(2)