有感于最近IOCP相关的问题实在太多,不得不写这篇IOCP学习指南,希望对IOCP新手有所帮助。首先,英文不好的请先去学好英文。VC程序员的最低英语要求是能看懂MSDN。下面就是重点:“I/O完成端口”的英文简称是IOCP,学习IOCP请在MSDN里面搜索iocp,会出现三个话题。每个话题都是金玉良言。尤其是“Writing Windows NT Server Applications in MFC Using I/O Completion Ports ”,更是说的清楚明白,还带有标准示例代码。  学习IOCP的最好途径,就是看MSDN及其代码。我看论坛上IOCP的问题,90%以上都可以在MSDN上找到答案。  只要能把MSDN上那三篇iocp的文章看完,也能把标准范例代码看过,肯定就会用IOCP了。再不会用的人,改行吧。

解决方案 »

  1.   

    打个比方吧,IOCP就好比乾坤大挪移,看MSDN就是九阳神功。没练好九阳神功就想去练乾坤大挪移是不会有什么好结果的。等九阳神功练得深了,练乾坤大挪移自然事半功倍。
      

  2.   


    没什么好多说的。学IOCP就一句话:看MSDN。看不懂MSDN就赶快去恶补计算机专业英语。能看懂MSDN的,看过自然就会了。看不懂MSDN的,说了也白说,他听不明白的。
      

  3.   

    msdn中的那些文章有中文的翻译了,以为您会发表一些高见!
      

  4.   

    感觉msdn的这篇文章才是比较全面的:
    Windows Sockets 2.0: Write Scalable Winsock Apps Using Completion Ports
      

  5.   

    http://expert.csdn.net/Expert/topic/3056/3056877.xml?temp=.9572565这个帖子不错,我贴那个英文的就是【windows网络编程】的原版,在csdn中也有中文翻译的!
      

  6.   

    IOCP可以说是网络编程的一座山峰,能真正掌握IOCP,对于开发人员绝对是一个巨大的提高。楼顶发言收入置顶贴,欢迎各位高手继续畅所欲言!
      

  7.   

    学习,顺便问个问题.iocp跟select有什么本质上区别??
      

  8.   

    to wltsui(-无招胜有招-) :
    我不认为我能比msdn说得更好,所以与其我来说,不如让msdn来说。to IFoo(我不是色盲,但我的世界却是黑白的):
    iocp的通讯操作和线程管理都是由windows内核来完成的,减少了上下文切换的消耗,这是它最特殊的地方。有很多资料都说iocp只适用于几百上千的连接,但msdn并没有这么说,我的实际经验也表明并非如此。对于网络通讯,实际上只要是单位时间内发生的通讯io次数够多,iocp就适用。我试过在20个连接的情况下比较iocp和WSAAsyncSelect模型的效率,仍然差一倍:在普通pc上频繁收发小数据,iocp能达到每秒收发数据各27000次,而消息模型则一万都不到。另外要说一下,对于大块数据传输,瓶颈是在网络或网卡上,iocp对此没什么帮助。对于小数据的频繁通讯,瓶颈通常在cpu上,用iocp很好。
    以上我在msdn里没看到,算是抛砖引玉吧。
      

  9.   

    再问一个,iocp有没有不适用的地方呢?(或者说他的缺点?)
      

  10.   

    如果你想跨平台或着在非windows系统开发,没有必要了
    如果你不想用多线程的话,也没有必要了
    如果你对效率的要求不是太高的话,也没有必要了
      

  11.   

    在我看来iocp的应用条件有三个:
    1、windows平台
    2、频繁的io事件
    3、服务器的主要工作模式是:收到->处理->发送,即所谓“乒乓模式”上述三点我认为是使用IOCP的充要条件。
      

  12.   

    补充说明一下:所谓“频繁的io事件”是指服务器每秒钟处理5000次以上的io请求。每秒io次数小于2000的,用消息机制基本上也可以了。如果对于性能要求不是特别苛刻,每秒io次数小于5000的应用环境,都可以用消息机制,毕竟消息机制易用易维护。