在 IO 操作没有固有的 APM 或 IO 线程/完成端口支持的情况下,启动高延迟异步 IO 操作(平均 100ms-500ms)的最佳方式是什么?
我不想让线程池/工作线程在活动爆发期间都被这样的操作阻塞。
我的具体示例是ODP.NET。它不(还?)支持 APM。 我看到了如何处理这种情况的答案,但我很好奇这是否真的是解决此类问题的普遍正确方法?我想这部分取决于对另一个问题的回答。
在 IO 操作没有固有的 APM 或 IO 线程/完成端口支持的情况下,启动高延迟异步 IO 操作(平均 100ms-500ms)的最佳方式是什么?
我不想让线程池/工作线程在活动爆发期间都被这样的操作阻塞。
我的具体示例是ODP.NET。它不(还?)支持 APM。 我看到了如何处理这种情况的答案,但我很好奇这是否真的是解决此类问题的普遍正确方法?我想这部分取决于对另一个问题的回答。
如果 IO 操作没有内在的异步支持,并且只为其操作提供阻塞方法,那么您别无选择,只能创建一个新线程或线程池线程,只是坐在那里等待它。
解决它的唯一方法是让底层 IO 操作具有异步支持。
在绝对不可能用异步 IO 重写的情况下,那么你最好的选择是
(a) ThreadPool,但是如果你尝试一次性租用太多线程,它会在创建额外线程时变得迟缓。这反过来又会影响使用线程池的任何其他东西的运行......计时器,那种东西......讨厌。
(b) 使用您自己的不受此固有限制的单独的类似线程池的解决方案。
ThreadPool 并不是真正用于阻塞操作。如果您的担忧是现实的,我会选择(b)。