2013-04-30 54 views
0

在IO操作没有固有的APM或IO线程/完成端口支持的情况下,启动高延迟异步IO操作(平均100ms-500ms)的最佳方式是什么?没有IO线程的长时间异步操作

我不希望线程池/工作线程在活动爆发期间被这样的操作阻塞。

我的具体示例是ODP.NET。它没有(还?)支持APM。 I see this answer for how to handle that case,但我很好奇,如果这真的是解决这个问题的一般正确方法?我想这部分取决于the answer to this other question

+0

是否有任何理由不能让IO工作线程池可以被阻塞并为普通工作者保留一个不同的池? – ssube 2013-04-30 18:37:33

回答

2

如果IO操作没有固有的异步支持,并且只为它们的操作提供阻塞方法,那么您别无选择,只能创建一个新的线程或线程池线程,它们就在那里等待它。

唯一的解决方法是底层IO操作具有异步支持。

1

在它的情况下绝对不可能异步IO重写,那么你最好的选择是

(一)线程池,但是创建额外的线程时,如果你尝试租赁太多就会变得迟缓线程一气呵成。这反过来会影响使用ThreadPool ...定时器的其他任何东西的运行,这种事情......令人讨厌。 (b)使用您自己的单独的threadpool-like解决方案,它不受此固有限制。

ThreadPool并不真正用于阻止操作。如果你的顾虑是现实的,我会去(b)。