進程池
父進程的實現流程
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)
