======  select 模型:
          
         select模型是WinSock中应用最广泛的模型之一,核心就是select函数,它可用于
     判断套接字上是否存在数据,或者能否向一个套接字写入数据。
         这个函数可以有效地防止应用程序在套接字处于阻塞模式中时,send或recv进入
     阻塞状态;同时也可以防止产生大量的WSAEWOULDBLOCK错误
          select的优势是能够从当个线程的多个套接字上进行多重连接及I/O。
     这就避免了伴随阻塞套接字和多重连接的线程剧增
 ======  WSAAsyncSelect 模型:
         这个是我个人最喜欢的一个模型^_^  因为它也是以消息为基础的。
         关键就是WSAAsyncSelect函数,将socket消息发送到hWnd窗口上,然后在那里
     处理相应的FD_READ,FD_WRITE等等消息
     优点:
         WSAAsyncSelect和WSAEventSelect模型提供了读写数据能力的异步通知,但他们不
     提供异步数据传送,而重叠及完成大unkou提供异步数据的传送。
         而且它可以在系统开销不大的情况下同时处理很多连接,而select模型还需要建立
     fd_set结构。
         缺点:
         必须要使用一个窗口接收消息-_-b
         如果处理成千上万的套接字就力不从心了
 ======  WSAEventSelect 模型
         这个也是以时间为基础的网络事件通知,但是与WSAAsyncSelect不同的是,
     它主要是由事件对象句柄完成的,而不是通过窗口。
         这个就有点复杂了,一句半句说不清...-_-b
         优点:
           不需要窗口
         缺点:
           每次只能等待64个事件,所以处理多个套接字时有必要组织一个线程池;
           所以伸缩性就不如后面的完成端口了
 ======  重叠模型
         这个模型可以使程序能达到更加的系统性能。基本设计原理就是让应用程序
      使用重叠的数据结构,一次投递一个或多个I/O请求。针对这些提交的请求,
      在他们完成之后,应用程序可为他们提供服务。
         它又分为两种实现方法:在事件中使用,还有就是完成例程,每样都不是很好学-_-b
 ======  完成端口
         这个是所有里面最为复杂的I/O模型,楼主最好是在理解了重叠I/O的基础之
     上再来学习。
         完成端口提供了最好的伸缩性,往往可以使系统达到最好的性能,是处理
     成千上万的套接字的首选。
         从本质上说,完成端口模型要求创建一个windows完成端口对象,该对象通
    过指定数量的线程,对重叠I/O请求进行管理,以便为已经完成的重叠I/O请求提供服务。










