4
在通过LPOVERLAPPED 结构了解的IOCP原理之后,其实我们可以通过很多方法来充分利用这个IOCP的线程池,而避免过多的线程的开销。
方法如下:
我们可以对IOCP的封装中封装更多的事件,比如:
而当我们比如接收完数据之后,将数据压入某个定义好的buffer队列中,我们有两种方法可以处理这个数据:
1:使用一个专门的线程处理该数据
2:Post一个消息给IOCP使得GQCS返回,然后由这个线程事件去触发执行
第一种方法的伪代码大致如下:
IN GQCS
GetDataBuffer
InsertIntoList
SetEvent
In Thread
WaitForEvent
ParseBufferList
FurtherExecute(Send or Send All)
ClearEvent
第二种方法就是本文真正想阐述的:
改变的地方在哪里呢:
In GQCS
GetDataBuffer
InsertIntoList
PostQueuedCompletionStatus
部分代码:
通过上面的代码之后,GQCS将得到一个完成事件,然后在该事件里面判断是否是IOParse,如果是,进入相应的处理函数:
这样我们就可以充分理由这个系统为我们维护的线程池了!而并不需要我们额外的开辟线程或者线程池来运行程序,越来越体会到这个IOCP的设计理念很强。
方法如下:
我们可以对IOCP的封装中封装更多的事件,比如:
而当我们比如接收完数据之后,将数据压入某个定义好的buffer队列中,我们有两种方法可以处理这个数据:
1:使用一个专门的线程处理该数据
2:Post一个消息给IOCP使得GQCS返回,然后由这个线程事件去触发执行
第一种方法的伪代码大致如下:
IN GQCS
GetDataBuffer
InsertIntoList
SetEvent
In Thread
WaitForEvent
ParseBufferList
FurtherExecute(Send or Send All)
ClearEvent
第二种方法就是本文真正想阐述的:
改变的地方在哪里呢:
In GQCS
GetDataBuffer
InsertIntoList
PostQueuedCompletionStatus
部分代码:
通过上面的代码之后,GQCS将得到一个完成事件,然后在该事件里面判断是否是IOParse,如果是,进入相应的处理函数:
这样我们就可以充分理由这个系统为我们维护的线程池了!而并不需要我们额外的开辟线程或者线程池来运行程序,越来越体会到这个IOCP的设计理念很强。
:-),这么说是准确的 的确是如此
当然必须用到另外线程的地方还是不能少
只是这是充分利用系统为我们维护的线程池的一个好方法
谢谢刀客分享
当然必须用到另外线程的地方还是不能少
只是这是充分利用系统为我们维护的线程池的一个好方法
谢谢刀客分享
谢谢刀客光顾 嘿嘿
使用定时器我觉得效果不会很好 不知道定时器是不是使用中断的方式唤醒 如果是的话 我觉得性能耗损不划算 使用这种post机制是一种很完美的 当然具体的数据测试我没有考虑过
或许拿出数据会更有说服力一些
使用定时器我觉得效果不会很好 不知道定时器是不是使用中断的方式唤醒 如果是的话 我觉得性能耗损不划算 使用这种post机制是一种很完美的 当然具体的数据测试我没有考虑过
或许拿出数据会更有说服力一些
分页: 1/1
1
1
疾病并不可怕,可怕的是我们自己的心
多个IOCP线程收到释放Client消息处理的问题


2008/06/03
09:12
2818





