肯定的啊,select 是最古老的网络模型,理解简单,开发简单,效率就自然差一些了。 poll本质上和select没有区别,它将用户传入的数组拷贝到内核空间,然后查询每个fd对应的设备状态,如果设备就绪则在设备等待队列中加入一项并继续遍历,如果遍历完所有fd后没有发现就绪设备,则挂起当前进程,直到设备就绪或者主动超时,被唤醒后它又要再次遍历fd。这个过程经历了多次无谓的遍历。 所以最后linux 上最新模型是epoll,windows 是完成端口,这些模型都是基于事件回调机制的,效率上要比轮询机制好得多。但开发得复杂度也高很多,但好在有很多封装好得库,如果只是用得化,找个适合的库就好了。
肯定的啊,select 是最古老的网络模型,理解简单,开发简单,效率就自然差一些了。
poll本质上和select没有区别,它将用户传入的数组拷贝到内核空间,然后查询每个fd对应的设备状态,如果设备就绪则在设备等待队列中加入一项并继续遍历,如果遍历完所有fd后没有发现就绪设备,则挂起当前进程,直到设备就绪或者主动超时,被唤醒后它又要再次遍历fd。这个过程经历了多次无谓的遍历。
所以最后linux 上最新模型是epoll,windows 是完成端口,这些模型都是基于事件回调机制的,效率上要比轮询机制好得多。但开发得复杂度也高很多,但好在有很多封装好得库,如果只是用得化,找个适合的库就好了。