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.Linux 高性能服务器编程 --- IO 复用
猜你喜欢
转载自blog.csdn.net/enlyhua/article/details/81058052
今日推荐
周排行