1 / 2
文档名称:

IOCP加Windows线程池打造高伸缩性高性能的服务器应用.pdf

格式:pdf   页数:2
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

IOCP加Windows线程池打造高伸缩性高性能的服务器应用.pdf

上传人:紫岑旖旎 2012/9/15 文件大小:0 KB

下载得到文件列表

IOCP加Windows线程池打造高伸缩性高性能的服务器应用.pdf

文档介绍

文档介绍:踏雪无痕
IOCP加Windows线程池打造高伸缩性高性能的服务器应用
分类: C++ 2012-08-13 10:10 1897人阅读评论(0) 收藏举报
对于IOCP,搞Windows服务器编程的都不会陌生,它所表现出来的性能是其他各种WinSock模型
难望其项背的。撰写本文的目的就是为让大家能够在深入理解IOCP的基础上,再来深入的挖掘Windows
系统的性能。此处假设读者对IOCP模型已经深刻理解,并对Windows线程、线程池有一定的了解。如果
对此还不熟悉,限于篇幅的原因,请您先学习理解这些内容后再来阅读本文。
在IOCP模型编程中,我们经常需要考虑的就是创建多少个线程来作为完成执行线程,很多时候这是
个非常需要技巧和经验的决策性问题。大多数情况下,我们采取的策略是看服务器上有多少CPU然后假定
每个CPU最多执行两个线程,然后我们创建的线程数量就是CPU数*2。这看起来很合理,但是实际上在复
杂的服务器应用环境中,这样做的效果并不尽如人意,很多时候我们希望得到一种更加动态灵活的方案。
有些有经验的程序员就自己编写线程池库,来实现这种动态灵活的管理方式,从而还可以实现一定的
扩展性,比如系统动态的添加了一些CPU的资源,或者系统负担比较重的时候,或者CPU因为频繁切换线
程场景而导致效率低下时,线程池的动态性就发挥出来了。
索性的是,在Windows2000以上的平台上,已经为我们提供了线程池的接口,虽然这些接口有时候
看起来还有些简陋,比如有名的QueueUserWorkItem函数,这些接口简陋到你连当前线程池中有多少活
动线程等信息都无法知道,你只能通过其它的工具来动态观察和猜测。但这样的简单性也为我们带来了调
用方便的实惠。当然到了Windows2008以上的平台时,线程池的函数总算是被大大加强了,你可以控制
更多东西了,关于Windows2008线程池的内容请看我的另一篇博客拙作《Windows2008线程池前
瞻》。
在结合IOCP和线程池这方面Windows系统也想到了程序员面临的这个困难,Windows系统干脆直
接就在系统内部捆绑了IOCP和线程池,提供了一个带IOCP功能的线程池函数——
pletionCallback。
此函数的原形如下:
BOOL WINAPI pletionCallback(
__in HANDLE FileHandle,
__in PLETION_ROUTINE Function,
ULONG Flags
);
需要的完成过程(实际也就是IOCP线程的过程)Function的原形需要你定义成如下的样子:
VOID CALLBACK pletionRoutine(
[in] DWORD dwErrorCode,
[in] DWORD dwNu