9.Linux 高性能服务器编程 --- IO 复用

IO 复用技术的应用场景:
	1.客户端同时处理多个 socket
	2.客户端要同时处理用户输入和网络连接
	3.TCP 服务器要同时处理监听 socket 和连接 socket
	4.服务器要同时处理TCP请求和UDP请求
	5.服务器要同时监听多个端口

文件描述符就绪条件:
	socket 可读:
		1.socket 内核接收缓冲区的字节数>=其低位水平标记 SO_RCVLOWAT。返回的字节数大于0
		2.socket 通信的对方关闭连接。返回的字节数等于0
		3.监听 socket 有新的连接
		4.socket 上有未处理的错误。

	socket 可写:
		1.socket 内核发送缓冲区的可用字节数大于或等于其低水位标记 SO_SNDLOWAT。返回的字节数大于0
		2.socket 的写操作被关闭。将触发 SIGPIPE 信号
		3.socket 使用非阻塞 connect 连接操作成功或者失败之后
		4.socket 有未处理的错误。

epoll 与 poll, select 的区别 :
	1.epoll 使用一组函数来完成任务,而不是单个函数
	2.epoll 把用户关心的文件描述符上的事件放到内核里的一个事件表中,而无需像select和poll那样,
	  每次调用都要重复传入文件描述符集或事件集中。但 epoll 需要使用一个额外的文件描述符,来唯一标识
	  内核中的这个事件表。

epoll 对文件操作符的两种操作模式 LT 和 ET 模式:
	1.LT(Level Trigger,电平触发):
	默认的。这种模式下epoll相当于一个效率较高的poll.
	当 epoll_wait 检测到其上有事件发生并将此事件通知应用程序后,应用程序可以不立即处理该事件。
	这样,应用程序下一次调用 epoll_wait 时,epoll_wait 还会再次向应用程序通告此事件,直到该事件被处理。

	2.ET(Edge Trigger, 边沿触发):
	当往epoll 内核事件表中注册一个文件描述符上的 EPOLLET 事件时,epoll将以ET模式来操作该文件描述符。
	ET模式是epoll的高效工作模式。
	当 epoll_wait 检测到其上有事件发生时并将此事件通知给应用程序后,应用程序必须立即处理该事件,因为
	后续的epoll_wait 调用将不再向应用程序通知此事件。
	可见,ET 模式在很大程度上降低了同一个 epoll 事件被重复触发的次数,因此效率比 LT 模式高。

9.1 select 系统调用

9.2 poll 系统调用

9.3 epoll 系列系统调用

9.3.3 LT 和 ET 模式

9.4 三组IO复用函数的比较

9.5 IO复用的高级应用一: 非阻塞 connect

9.6 IO复用的高级应用一: 聊天室程序

9.7 IO复用的高级应用三:同时处理TCP和UDP服务

9.8 超级服务xinetd

猜你喜欢

转载自blog.csdn.net/enlyhua/article/details/81058052