在 Linux 环境下多进程的应用很多,其中最主要的就是网络/客户服务器。多进程服务器是当客户有请求时,服务器用一个子进程来处理客户请求。父进程继续等待其它客户的请求。这种方法的优点是当客户有请求时,服务器能及时处理客户,特别是在客户服务器交互系统中。对于一个 TCP 服务器,客户与服务器的连接可能并不马上关闭,可能会等到客户提交某些数据后再关闭,这段时间服务器端的进程会阻塞,所以这时操作系统可能调度其它客户服务进程,这比起循环服务器大大提高了服务性能。
多并发服务器
多进程并发服务器
首先回顾一下单个链接的处理方式:
- 创建套接字 - 监听
- 绑定
- 鉴定 - listen(lfd,blcklog);
- 接受连接请求
- 通信
梳理一下多进程并发服务器的方式:
- 创建套接字 - 监听
- 绑定
- 鉴定 - listen(lfd,blcklog);
- ————–分割线
- 接受连接请求交给父进程,有新的连接请求则fork新进程
- 接受连接请求
- 通信
使用多进程的方式, 解决服务器处理多连接的问题:
共享
- 读时共享, 写时复制
- 文件描述符
- 内存映射区 – mmap
父进程 的角色是什么?
等待接受客户端连接 – accept
有链接:
- 创建一个子进程 fork()
将通信的文件描述符关闭
子进程的角色是什么?
通信
- 使用accept返回值 - fd
关掉监听的文件描述符
- 浪费资源
创建的进程的个数有限制吗?
- 受硬件限制
- 文件描述符默认也是有上限的1024
子进程资源回收
wait/waitpid
使用信号回收
信号捕捉:
- signal
- sigaction - 推荐
捕捉信号: SIGCHLD
1 |