iocp和select区别 (学习)

把TCP/IP协议卷1-3 + UNIX网络编程看通,
然后在
486  Pentium MMX , 双核心 , 4核心 的CPU平台下
使用 10M 100M 1000M分别做测试,会得出超出你想象的结果!

硬件平台日新月异,推出 POLL , EPOLL, IOCP的初衷,是为了解决在有限CPU时间片内最高效率的利用网络带宽,当时针对的平台是486 - pentinum mmx级别的 [EPOLL是在286 386时代,当然有SPARC等处理器,但是那不是给你一个人用的]
因为IOCP等是内核状态运行,效率当然比SELECT高
可能SELECT所在线程还要好几个时间片才轮到,但是内核线程是第一时间运行的,因此效率高

但是CPU发展到现在,网络带宽只提升了大约10倍,而CPU性能提升了几百上千倍,那些瓶颈已经不存在了,
推出IOCP的时候,微软自己的IIS都没有采用,它用的是驱动,因为那个时候CPU是瓶颈

CPU硬件还会快速发展,但是网络带宽的提升将远远落后于CPU性能的提升
所以在现在或者将来的平台上,你用SELECT也好,IOCP也好,EPOLL也好
效率的差距几乎可以忽略

至于那些说EPOLL或者IOCP明显比SELECT快的,要么是SELECT用的方法不正确,要么使用了某些极限平台,例如,在一个8核心的服务器上,使用超个8个线程做压缩,同时做对比测试,那么这个时候,IOCP的内核优势可以发挥出来了,内核态总是比SELECT的用户态响应速度要快,但是差距依然非常非常小,除非你把SOCKET的缓冲给关闭掉[设置为0]

其实,多参考国外那些开源的网络工程,你会发现,绝大部分都是用SELECT,连POLL都不用,更不会用EPOLL或者IOCP,因为可移植性是第一位的,偶尔有点性能小差距,相对与可移植性和代码的健壮性,完全可以无视
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值