[英]Is select() a busy wait system call?
int select(int nfds, fd_set *readfds, fd_set *writefds,
fd_set *exceptfds, struct timeval *timeout);
题:
不管通过了什么timeout
参数,
select()
是否占用CPU周期,直到准备好任何文件描述符?
它不应该; 如果没有立即可用的FD,任何体面的OS(包括Linux,Windows等)都将暂停该过程。 从发生的事件到下一个可用的FD之间的CPU周期可供系统中的其他线程/进程和/或系统空闲循环使用。 通常,操作系统被安排为事件驱动的系统,因此无需反复检查选择的变化:(例如,可读取数据的)原因将导致所有活动选择被告知这一方面,影响。
但是,请注意,select()通常是实际实现的C库包装函数。
请注意,您必须在每次成功返回时清除所有未偿还的可用FD,因为如果不这样做,您将在没有充分理由的情况下招致系统调用开销,并且还存在“饥饿”的风险。
可能导致繁忙等待行为的原因是将超时设置为接近零的值,然后循环播放。 我看到这种情况在某些情况下是因为程序员认为他们需要检查FD中不可见的东西而已
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.