假如没有数据可读可写,select也是不停的轮询socket数组,耗费cpu吗?
假如没有数据可读可写,select也是不停的轮询socket数组,耗费cpu吗?poll呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
假如没有数据可读可写,select也是不停的轮询socket数组,耗费cpu吗?poll呢?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(1)
肯定的啊,select 是最古老的网络模型,理解简单,开发简单,效率就自然差一些了。
poll本质上和select没有区别,它将用户传入的数组拷贝到内核空间,然后查询每个fd对应的设备状态,如果设备就绪则在设备等待队列中加入一项并继续遍历,如果遍历完所有fd后没有发现就绪设备,则挂起当前进程,直到设备就绪或者主动超时,被唤醒后它又要再次遍历fd。这个过程经历了多次无谓的遍历。
所以最后linux 上最新模型是epoll,windows 是完成端口,这些模型都是基于事件回调机制的,效率上要比轮询机制好得多。但开发得复杂度也高很多,但好在有很多封装好得库,如果只是用得化,找个适合的库就好了。