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 模式高。

EPOLLONESHOT : 
	即使使用 ET 模式,一个 socket 上的某个事件还是可能被多次触发。这在并发程序中会引起问题。
	有时候,我们期望一个 socket 连接在任一时刻都只被一个线程处理,这一点可以使用 epoll 的 EPOLLONESHOT 事件实现。
	对于注册了 EPOLLONESHOT 事件的文件描述符,操作系统最多触发其上注册的一个可读,可写或异常事件,且只触发一次,除非我们使用
	epoll_ctl 函数重置该文件描述符上注册的 EPOLLONESHOT 事件。这样,当一个线程处理某个 socket 时,其他线程不可能有机会操作该
	socket 的。但反过来思考,注册了 EPOLLONESHOT 事件的 socket 一旦被某个线程处理完毕,该线程就应该立即重置这个 socket 上的 EPOLLONESHOT 事件,
	以确保这个 socket 下一次可读时,起 EPOLLIN 事件能被触发,进而让其他工作线程有机会继续处理这个 socket.

 

 

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

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值