网络服务器
单循环服务器:服务器在同一时刻只能响应一个客户端的请求
并发服务器模型:服务器在同一时刻可以响应多个客户端的请求
实现TCP并发服务器
1.多进程
2.多线程
3.IO多路复用:
为了解决进程或线程阻塞到某个 I/O 系统调用而出现的技术,使进程不阻塞于某个特定的 I/O 系统调用。
优势:系统开销小,系统不需要建立新的进程或者线程,也不必维护这些线程和进程。
多进程实现
多线程实现
Linux系统IO模型:
1.阻塞IO
scnaf
getchar
fgets
gets
read
recv
recvfrom
1.可以实现多任务同步(多个事件相互影响)
2.可以节省CPU资源开销,提高执行效率
2.非阻塞IO
0
1. 获取文件描述符属性
fcntl---------flag 0
2. 为文件描述符添加非阻塞属性
3. 设置文件描述符属性
fcntl
1.可以访问多个IO事件
2.配合轮询操作,浪费CPU资源
3.信号驱动IO
1.实现异步IO操作,节省CPU开销
2.只能针对比较少的IO事件
1)为IO设备增加信号驱动属性
O_ASYNC
2)关联SIGIO信号到对应进程
fcntl(fd, F_SETOWN, getpid());
3) 注册SIGIO处理函数
signal
4.多路复用IO