之前看过进程池,但是理解的不够透彻,这次算是了解了他的全部过程了吧
一篇自己的领悟,可能对大家帮助不大
进程池需要的结构体:
1.子进程结构体
1.1m_pid负责存储子进程特有的pid
1.2管道负责与主进程进行通信
2.进程池结构体
2.1进程池中进程总数
2.2子进程在池中的序号
2.3进程的epoll内核事件表,m_epollfd标识
2.4监听socket
2.5标识子进程是否结束
2.6保存所有子进程的描述信息
2.7进程池静态实例
前面的是子进程和进程池的结构,整个进程池通过信号进行通信,进程池通过存储子进程的pid来记录创建的子进程
说一下关键部分
(1)主进程使用epoll的et模式进行内核事件表的监控
(2)先运行父进程监控,然后运行所有的子进程
(3)如果有客户端连接,那么父进程依照自己的算法选择合适的子进程,当父进程管道传来的id恰好等于当前子进程的文件描述符且有事件可读那么第一次让相应第i个子进程和父进程进行连接,然后把链接所得的socket注册到子进程的事件表里面去,这样子进程就和客户端链接成功并且可以监听客户端的相应状态变化了(子进程的注册表的变化并不会影响到父进程)