1. 多进程并发服务器
在 Linux 环境下多进程的应用很多,其中最主要的就是网络/客户服务器。多进程服务器是当客户有请求时,服务器用一个子进程来处理客户请求。父进程继续等待其它客户的请求。这种方法的优点是当客户有请求时,服务器能及时处理客户,特别是在客户服务器交互系统中。对于一个 TCP 服务器,客户与服务器的连接可能并不马上关闭,可能会等到客户提交某些数据后再关闭,这段时间服务器端的进程会阻塞,所以这时操作系统可能调度其它客户服务进程,这比起循环服务器大大提高了服务性能,以下为多进程并发服务器和客户端交互的拓扑结构:
2. 多进程并发服务器实现思路
TCP 并发服务器的思想是每一个客户机的请求并不由服务器直接处理,而是由服务器创建一个子进程来处理。
问题思考:
- 客户端退出时对应子进程要如何处理,避免僵尸进程?
答:子进程一以signal(SIGCHLD, cleanup); 信号通知的方式通知父进程退出清理僵尸进程;
-
多个子进程同时退出时信号可能被湮没,如何处理?
答:在cleanup处理函数中,以
while (waitpid(-1, NULL, WNOHANG) > 0);
方式轮询扫描子进程的状态。
3. 多进程并发服务器实现
服务端