我们可以将完成端口线程(用于异步I / O操作)重新用作CLR进程ThreadPool中的工作线程吗?
如果这是天真的,那么有人可以建议我如何最大限度地使用线程池线程,以减少工作队列中堆积的工作项数量。
答案 0 :(得分:2)
IOCP线程已经是“工作人员” - 他们从队列中获取输入并对收到的项目进行操作。如果您希望避免使用另一个线程池来处理来自网络驱动程序的“正常”IOCP完成对象rx以外的项目,则无法阻止您“手动”将对象排队到要求IOCP池线程执行的IOCP队列其他行为。我现在忘记了实际的API,但是AFAIK应该没问题。
我记得使用这种机制进行服务器调优 - 通过对指示接收IOCP池线程终止的项进行排队来减少IOCP线程的数量。
那就是说,我不确定这样的mechansim会显着提高吞吐量 - 工作必须在某个地方完成,而且避免额外的线程池可能无济于事。根据经验,作为通用的线程间通信机制,IOCP队列的性能比Windows消息队列差,(因为只有一个线程可以等待,因此对于线程池无用),以及基于用户空间CS /信号量的PC队列。
RGDS, 马丁