I / O完成端口与QueueUserApc?

时间:2013-01-21 19:27:34

标签: c++ c windows performance threadpool

在Windows下,有两种方法可以插入工作项以避免创建太多线程:

手段1:使用IOCP;

表示2:使用QueueUserApc。

然而,手段1比手段2复杂得多。

所以我的问题是:手段1相对于手段2的优势是什么?

1 个答案:

答案 0 :(得分:8)

当您致电QueueUserApc时,您必须定位特定主题。

IOCP有一个QueueUserApc缺少的内置线程调度机制,允许您从线程池中定位最有效的线程。线程调度机制自动防止太多线程同时运行(这会导致额外的上下文切换和额外争用)或者同时运行的线程太少(导致性能不佳)。

Windows实际上会跟踪运行IOCP作业的线程数。它最初设置允许运行的线程数等于计算机上的虚拟核心数。但是,如果线程阻塞I / O或同步,则会自动释放在IOCP端口上阻塞的另一个线程,从而避免线程饥饿。

此外,IOCP可以轻松连接到I / O,以便I / O事件触发IOCP端口上阻塞的线程调度。这是对Windows上的大量目标执行I / O的最有效方法。

相关问题