荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: mmkiller (PPMM makes me go around), 信区: Program
标  题: Re: 谁做过IO完成端口模型Winsock服务器。。
发信站: 荔园晨风BBS站 (2005年03月24日21:46:49 星期四), 站内信件

异步IO、APC、IO完成端口、线程池与高性能服务器 (三)
转载: http://www.vchelp.net/
原作者姓名 Fang(fangguicheng@21cn.com)

正文
异步IO、APC、IO完成端口、线程池与高性能服务器之三 IO完成端口

IO完成端口

下面摘抄于MSDN《I/O Completion Ports》,smallfool翻译,原文请参考CSDN文档中心文
章《I/O Completion Ports》,
http://dev.csdn.net/Develop/article/29%5C29240.shtm 。
I/O完成端口是一种机制,通过这个机制,应用程序在启动时会首先创建一个线程池,然后
该应用程序使用线程池处理异步I/O请求。这些线程被创建的唯一目的就是用于处理I/O请
求。对于处理大量并发异步I/O请求的应用程序来说,相比于在I/O请求发生时创建线程来
说,使用完成端口(s)它就可以做的更快且更有效率。
CreateIoCompletionPort函数会使一个I/O完成端口与一个或多个文件句柄发生关联。当与
一个完成端口相关的文件句柄上启动的异步I/O操作完成时,一个I/O完成包就会进入到该
完成端口的队列中。对于多个文件句柄来说,这种机制可以用来把多文件句柄的同步点放
在单个对象中。(言下之意,如果我们需要对每个句柄文件进行同步,一般而言我们需要
多个对象(如:Event来同步),而我们使用IO Complete Port 来实现异步操作,我们可
以同多个文件相关联,每当一个文件中的异步操作完成,就会把一个complete package放
到队列中,这样我们就可以使用这个来完成所有文件句柄的同步)
调用GetQueuedCompletionStatus函数,某个线程就会等待一个完成包进入到完成端口的队
列中,而不是直接等待异步I/O请求完成。线程(们)就会阻塞于它们的运行在完成端口(
按照后进先出队列顺序的被释放)。这就意味着当一个完成包进入到完成端口的队列中时
,系统会释放最近被阻塞在该完成端口的线程。
调用GetQueuedCompletionStatus,线程就会将会与某个指定的完成端口建立联系,一直延
续其该线程的存在周期,或被指定了不同的完成端口,或者释放了与完成端口的联系。一
个线程只能与最多不超过一个的完成端口发生联系。
完成端口最重要的特性就是并发量。完成端口的并发量可以在创建该完成端口时指定。该
并发量限制了与该完成端口相关联的可运行线程的数目。当与该完成端口相关联的可运行
线程的总数目达到了该并发量,系统就会阻塞任何与该完成端口相关联的后续线程的执行
,直到与该完成端口相关联的可运行线程数目下降到小于该并发量为止。最有效的假想是
发生在有完成包在队列中等待,而没有等待被满足,因为此时完成端口达到了其并发量的
极限。此时,一个正在运行中的线程调用GetQueuedCompletionStatus时,它就会立刻从队
列中取走该完成包。这样就不存在着环境的切换,因为该处于运行中的线程就会连续不断
地从队列中取走完成包,而其他的线程就不能运行了。
对于并发量最好的挑选值就是您计算机中CPU的数目。如果您的事务处理需要一个漫长的计
算时间,一个比较大的并发量可以允许更多线程来运行。虽然完成每个事务处理需要花费
更长的时间,但更多的事务可以同时被处理。对于应用程序来说,很容易通过测试并发量
来获得最好的效果。
PostQueuedCompletionStatus函数允许应用程序可以针对自定义的专用I/O完成包进行排队
,而无需启动一个异步I/O操作。这点对于通知外部事件的工作者线程来说很有用。
在没有更多的引用针对某个完成端口时,需要释放该完成端口。该完成端口句柄以及与该
完成端口相关联的所有文件句柄都需要被释放。调用CloseHandle可以释放完成端口的句柄



 【 在 jiffies (jiffies) 的大作中提到:
 】: 什么东西,介绍一下: 【 在 mmkiller (PPMM makes me go around) 的大作中提到:
】 : :  想加qq请教一下。。


--
波音麦道飞机                  http://lib.verycd.com/2005/03/09/0000041568.html
Microsoft TechNet中文网络广播 http://lib.verycd.com/2005/01/02/0000033458.html
御用闲人                      http://lib.verycd.com/2005/03/14/0000042166.html
3月14日温总理记者招待会实录   http://lib.verycd.com/2005/03/16/0000042492.html
继续无敌奖门人                http://lib.verycd.com/2004/12/13/0000030554.html
残酷一叮                      http://lib.verycd.com/2005/02/05/0000038136.html
※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.110.120]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店