我目前正在互联网上搜索自定义线程池实现.我找到了一个使用IOCP的实现.我想知道使用它们有什么好处?他们提供工作偷窃,或类似的东西,我真的能找到答案......
IOCP ="IO完成端口".它是内置于Windows操作系统中的内核对象,可为您提供管理多线程异步IO的智能方法.
在非常简单(有点过于简化)的术语中,您可以告诉IOCP您想要完成的IO作业.它将异步执行它们并维护每个作业的结果队列.您打电话告诉IOCP有关作业立即返回(当IO发生时它不会阻塞).您将返回一个概念上类似.NET IAsyncResult的对象...如果您选择,它可以阻止,或者您可以提供回调,或者您可以定期轮询以查看作业是否完整.
在执行这些作业时,IOCP使用线程池.线程池试图将线程数限制为处理器数量或更少(这是可配置的,但意图和默认是将其限制为处理器数量).但是,IOCP规定了有时这些线程上的任务可能会阻塞的事实.Asycn IO任务不会阻止,但您可能已经提供了其他类型的任务.因此,您可以为IOCP提供另一个数字......这是一些高于"通常最大值"的线程,由于其他一个线程被阻止,IOCP可以通过该线程.目标是达到实际做某事的线程的"通常最大"(即,未被阻止).如果发生这种情况,那么有一段时间IOCP将使用比通常的max更多的线程,但它会拒绝创建任何新线程,直到它可以回到"通常的最大值".
这是一个简短的摘要,只是概念性的,正如我所说,在某些方面过于简化.但它应该给你一般的想法.杰弗里里希特关于Windows操作系统的书籍详细介绍了这一点(但这些书已经绝版了).您可以找到这些使用过的书籍,实际上它们的使用成本比原来高.我认为"高级Windows"是你想要的标题,但可能有一本书的更新版本有不同的标题.