iocp原理
1、它的原理如下:1,多线程多核编程,消除cpu瓶颈。2,采用IOCP或epoll,利用状态监测和通知方式,消除网络I/O阻塞瓶颈。3,采用事件驱动或异步消息机制,可以消除不必要的等待操作。2、从上面的分析也可以看出,epoll比select的提高实际上是一个用空间换时间思想的具体应用.深入理解epoll的实现原理:开发高性能网络程序时,windows开发者们言必称iocp,linux开发者们则言必称epoll。3、structhead_info{inthead_type;//包体内容inthead_len;//包体长度};这个结构体长度的大小为为8,里面有包体的内容和包体的长度,接收时先接受包头的8字节长度,然后进行分析,再根据分析的接头接受包体就行了。
iocp原理
IOCP简介提到IOCP,大家都非常熟悉,其基本的编程模式,我就不在这里展开了。在这里我主要是把IOCP中所提及的概念做一个基本性的总结。IOCP的基本架构图如下:如图所示,在IOCP中,主要有以下的参与者:--》完成端口:是一个FIFO队列,操作系统的IO子系统在IO操作完成后,会把相应的IO packet放入该队列。--》等待者线程队列:通过调用GetQueuedCompletionStatus API,在完成端口上等待取下一个IO packet。--》执行者线程组:已经从完成端口上获得IO packet,在占用CPU进行处理。除了以上三种类型的参与者。我们还应该注意两个关联关系,即:--》IO Handle与完成端口相关联:任何期望使用IOCP的方式来处理IO请求的,必须将相应的IO Handle与该完成端口相关联。需要指出的时,这里的IO Handle,可以是File的Handle,或者是Socket的Handle。--》线程与完成端口相关联:任何调用GetQueuedCompletionStatus API的线程,都将与该完成端口相关联。在任何给定的时候,该线程只能与一个完成端口相关联,与最后一次调用的GetQueuedCompletionStatus为准。