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

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

阅读 2.5k
1 个回答

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

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题