2011-09-13 33 views
0

我们可以在CLR进程ThreadPool中重新使用完成端口线程(用于异步I/O操作)作为工作线程吗?线程重用

如果这是天真的,那么有人可以建议我如何最大限度地使用线程池线程,以减少堆栈在工作队列中的工作项的数量。

回答

2

IOCP线程已经被分类为'工作人员' - 他们从队列中获取输入并对接收到的项目执行操作。如果您希望避免使用另一个线程池处理来自网络驱动程序的“普通”IOCP完成对象rx以外的项目,则不会阻止您将对象“手动”排队到要求IOCP池线程执行的IOCP队列其他行为。我现在忘记了实际的API,但AFAIK应该没有问题。

我记得使用这种机制进行服务器调优 - 通过排队指示接收IOCP池线程终止的项目来减少IOCP线程的数量。这就是说,我不确定这样一个机制会显着提高吞吐量 - 工作必须在某个地方完成,而且可能避免使用额外的线程池并不会有太大帮助。在经验上,作为通用的线程间通信机制,IOCP队列的性能比Windows消息队列差(因为只有一个线程可以等待,所以对线程池无用)以及基于用户空间CS /信号量的PC队列。

Rgds, Martin Martin

+0

您好Martin,感谢您的支持。即使我听说过这个建议的方法。但是我陷入困境,Google搜索之后没有得到足够的进展。 –