2008-12-17 58 views
1

我正在搜索互联网上的自定义线程池实现。 我找到了一个使用IOCP的实现。我想知道使用它们有什么好处?他们提供盗窃工作,或类似的东西,我真的可以找到答案...自定义线程池中的IOCP

+1

也许你可以添加链接到你找到的自定义线程池实现? – 2009-01-13 17:51:44

回答

7

IOCP =“IO完成端口”。它是内置于Windows操作系统中的内核对象,可为您提供管理多线程异步IO的智能方式。

在非常简单化(以及稍微过度简化)的术语中,您告诉IOCP您要完成的IO作业。它将异步执行它们并保持每个作业结果的队列。您立即返回通知IOCP有关作业的呼叫(在IO发生时它不会阻止)。您将返回一个概念上类似于.NET IAsyncResult的对象......它可以让您在选择时阻止,或者您可以提供回调,或者可以定期轮询以查看作业是否完成。

在做这些工作时,IOCP使用线程池。线程池尝试将线程数限制为处理器数量或更少(这是可配置的,但意图和默认设置将其限制为处理器数量)。但是,IOCP规定有时这些线程上的任务可能会被阻塞。 Asycn IO任务不会阻塞,但您可能已经提供了其他一些任务。因此,您可以为IOCP提供另一个数字......这是“正常最大值”之上的多个线程,由于其他线程中的一个线程被阻塞,允许IOCP上升。目标是达到实际做某些事情(即不被阻止)的线程的“通常最大值”。如果发生这种情况,那么一段时间内IOCP将使用比通常的最大线程更多的线程,但它会拒绝创建任何新线程,直到它回到“通常的最大值”。

这是一个简单的总结,只是概念性的,正如我所说的,在某些方面过于简化。但它应该给你一个总的想法。 Jeffrey Richter在Windows操作系统上的书籍详细介绍了这些内容(但这些书已经绝版了)。你可以找到这些使用的书籍,而且实际上它们比原来使用的花费更多。我认为“高级Windows”是你想要的标题,但是可能有一本书的更新版本带有不同的标题。

+0

伟大的描述。谢谢! – John 2009-04-25 14:22:18

0

如果您打算在工作线程中使用Windows IO功能,则可以使用IOCP实现。 IO功能可以读/写到磁盘或网络。

查看推送框架http://www.pushframework.com查看实时服务器实现的IOCP用法。