繁体   English   中英

select()是繁忙的等待系统调用吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM