selec/poll中的读写事件和epoll中的读写事件

本文探讨了在Linux网络编程中,select、poll和epoll在处理读写事件上的区别。epoll相较于select和poll,具有更高的性能,尤其在处理大量文件描述符时。文章详细阐述了select/poll中的读写事件触发条件,并对比了epoll在ET模式下的读写事件,指出epoll的事件区分更加清晰。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  在Linux网络编程中,常常使用select和poll来做事件触发,监听socket的读写状态,然后进行读写操作。现在新的linux内核中,增加了epoll事件触发机制,具有更高的性能和更好的设计理念,可以用它来完全代替select和poll。相比于select,epoll最大的好处在于它不会随监听fd数目的增长而降低效率。因为在内核总的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,在linux/posix_types.h头文件中有这样的声明:

#define __FD_SETSIZE    1024

表示select最多同时监听1024个fd,当然,可以通过修改头文件再重新编译内核来扩大这个数目,但这似乎并不治本。(引自《使用EPOLL进行网络编程》,这篇文章主要是进行一个读写事件的总结,不会过多地讨论epoll,而且本人也是初学)

一、select/poll中的读写事件

  1.下列四个条件中的任何一个满足时,套接口准备好多:

      a. 有数据可读,专业的说法是:套接字接收缓冲区中的数据字节数大于等于套接字接收缓冲区低潮限度的当前值。可以使用套接字选项SO_RCVLOWAT来设置低潮限度,对于TCP和UDP套接字,其值缺省为1

   &n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值