唉!偶只会select模型和线程阻断模型!
但是select模型和重叠io正是为了适应Windows消息驱动机制的需要而添加的,
重叠io比select模型使用复杂,目前用得不多,偶认为都应该掌握!

解决方案 »

  1.   

    能谈谈select模型比阻塞模型好在哪吗?
    我感觉:
           用阻塞模型需要一个线程管理一个客户请求
           用select好像不是起线程了,而是变成了管理socket数组了,一切都用 for循环  +FD_ISSET搞定
           select本身是阻塞的,已后用到的send,recv都设置成了非锁定
      
          可我不知道这样能提高多大的效率(速度)
    请过来人点播点播,谢谢!
      

  2.   

    其实重叠io把一些本来由应用程序做的事情交给系统实现,
    效率并不见得高,而且socket数量也有限制。用select其实也可以实现这些功能。
      

  3.   

    反正我是放弃了select,那是为了兼容berkely socket才有的方法。在windows下不适合使用。
    以微软排外的风格,select的背后不一定使用什么低效率的方法去实现呢。微软告诉我们它的模型里overlapped I/O比其他模型都要,那就没错了。原因是overlapped I/O可以不使用系统缓冲区,减少了copy操作。
    而且可以使用多个缓冲区,减少了分配内存的操作,可以应用到“栈式缓冲区”具体还是看MSDN好。那本书写的仍然模糊,例子普遍性不强,没有体现overlapped I/O的优势。
    以前也认为overlapped I/O是有数量限制的,但后来仔细看了completeRouting,发现可以没有限制的,还有完成端口模型,更是海量了。
    奇怪那本书的作者怎么那么喜欢用event,不好用。不过我也刚看,打算写几个测试程序验证一下。去网络/通讯讨论吧,不喜欢这里闹哄哄的,什么东西都有。
      

  4.   

    FD_SETSIZE不是64吗?难到可以没有限制?书上都说最大64啊。
      

  5.   

    哪能找到可以充分体现重叠i/o效率的例子,不胜感激[email protected] 一次最多可以等64个对象,除非用别的方法,那是什么方法呢?
      

  6.   

    关于重叠i/o msdn里有例子吗?在什么地方,我怎么没找到。
      

  7.   

    重叠IO是windows特定的东东,如果大量采用重叠io,你的程序移植性可能要经受考验(但是不考虑移植就不用担心了)。我觉得还是采用berkely socket的标准比较好。
      

  8.   

    to vcbear(一只平凡无知的熊)如果重叠io可以大幅度提升性能(速度),我宁愿用重叠io。
    可是怎样才能证明重叠io可以比select模型大幅度提升性能呢,那位高手讲讲?
      

  9.   

    如果在win系统里追求高效率,建议直接研究completion Port的IO方式了。
    在windows网络编程里有详细的描述
      

  10.   

    IO Completion Ports 只有NT/2000才支持。学起来复杂作起来简单。我觉得完成例程和事件是差不多的,根本就是同样的方法。select模型需要一个系统缓冲,每次需要复制缓冲到你的缓冲区里,分配内存和复制的操作肯定浪费时间。
    而且overlapped i/o好像是可以多个线程同时进行读写操作的。也就是说在上一个操作未完成的时候就可以再次操作,就是所谓“重叠”。select不可以,只能干完一件再干一件。在汇编一级上,我觉得overlapped i/o可以省许多call指令。
      

  11.   

    to flywhc(午夜蓝调)
    你说:”以前也认为overlapped I/O是有数量限制的,但后来仔细看了completeRouting,发现可以没有限制的“请问怎样才能没有限制呢。现在普遍的做法是当>64是需要再起工作者线程。你有什么好办法吗?
      

  12.   

    重叠io模型有些不太体贴,连事件的类型都不提供(resv or send)还要自己设置逻辑去判断!要不就得起多个线池。
    WSAEventSelect模型设计还挺丰满,不知道其性能和重叠io模型比较如何,请过来人给比较一下好吗?
      

  13.   

    to flywhc(午夜蓝调)
    你是怎么突破overlapped I/O是有数量限制的!快说啊!我想不通除非你不用WSAWaitForMultipleEvents 那你用的是什么呢???
      

  14.   

    完成端口实质上也是用的windows Overlapp内核技术,只是在线程管理和OverlappIO结果通知上有不同的方式而已。推荐completion port方式,编程还是比较简单的。