上次的程序只能保持,单线程或者进程
多进程并发服务器
进程的特点(有血缘关系)
创建子进程:fork();
虚拟地址空间被复制 ,从一份变成两份(用户区和内核区)
进程之间的数据不会影响
父进程中的数据被复制给了子进程(都会复制下面的)
用户区:
堆区:栈区:全局数据区:代码区:
内核区:
文件描述符表;
通过父进程,回收子进程资源
支持对客户端连接的服务器程序→多进程版
服务器端需要干什么事?
监听 ,等待客户端的连接(accept,阻塞)
通信,需要和多个客户端建立连接,并且通信,每建立一个连接需要一个专门负责通信的进程
接收数据 →read 、recv →默认阻塞发送数据 →write 、send→默认阻塞
有血缘关系的进程
父进程 一个
子进程 多个
### 代码
多线程版的服务器
主线程→等待并接受客户端的连接
子线程→建立连接之后处理通信的流程
//多个线程共用一个共同的虚拟地址空间
共享资源:
堆区
全局数据区
文件描述符表(共享内存)
独享资源:
栈区
线程资源释放:做线程分离,不用特意回收
代码如下: