1 我想写一个异步数据接收的TCP服务器端程序,之前的做法是这样的:WSAAsyncSelect设置了关注的socket事件,在每次收到FD_READ消息时,创建一个线程去接收数据,并进行处理。这样的话,并发过来的所有TCP连接中的数据,都可以同时处理。但是后来有高手这种方式不是很好,这种方式把很多CPU时间浪费在了线程的创建和线程上下文的切换上。而真正好的异步数据接收要用到I/O重叠和完成端口技术,是这样么?
     2 请大家说说如何异步数据接收是最好的?
      

解决方案 »

  1.   

    1.完成端口适用于大量连接的情景
    2.这应该根据具体需求吧,你的需求是什么样的?iocp可以满足大多数需求
      

  2.   

    你的方法思路很简单,但是效率确实不行。
    I/O重叠和完成端口就是专门为异步数据传输而设计的,你去看看《Windows网络编程(第二版)》,里面有详细的介绍。
      

  3.   

    这种异步通知的模型WSAAsyncSelect,是否只适合简单的通讯(I/O时间短了,象传文件这种就不行了),是这样吗
      

  4.   

    使用IOCP可以完成大规模并发的通讯,其性能远比Windows下的其他IO模型好
      

  5.   

    每次都要去创建新线程这个开销很大,多线程你还需要处理条件竞争同步的问题。
    windows上真正要处理大并发处理,你还是去使用iocp吧,线程池,都是有现成封装的
    WSAAsyncSelect适合环境是客户端基于窗体消息的IO模型
      

  6.   

    用IOCP实现是比较好的方法,适合大量用户,用创建线程很占用CPU资源,适合用户比较少的情况下,但用IOCP实现比较麻烦一点.