假如没有数据可读可写,select也是不停的轮询socket数组,耗费cpu吗?

发布于 2022-09-12 03:08:46 字数 53 浏览 28 评论 0

假如没有数据可读可写,select也是不停的轮询socket数组,耗费cpu吗?poll呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

无边思念无边月 2022-09-19 03:08:46

肯定的啊,select 是最古老的网络模型,理解简单,开发简单,效率就自然差一些了。

poll本质上和select没有区别,它将用户传入的数组拷贝到内核空间,然后查询每个fd对应的设备状态,如果设备就绪则在设备等待队列中加入一项并继续遍历,如果遍历完所有fd后没有发现就绪设备,则挂起当前进程,直到设备就绪或者主动超时,被唤醒后它又要再次遍历fd。这个过程经历了多次无谓的遍历。

所以最后linux 上最新模型是epoll,windows 是完成端口,这些模型都是基于事件回调机制的,效率上要比轮询机制好得多。但开发得复杂度也高很多,但好在有很多封装好得库,如果只是用得化,找个适合的库就好了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文