无IO线程的长时间异步操作

本文关键字:长时间 异步操作 线程 IO | 更新日期: 2023-09-27 18:11:39

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

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

我的具体示例是使用ODP.NET。它(还)不支持APM。我看到了如何处理这种情况的答案,但我很好奇,这是否真的是解决此类问题的一般正确方法?我想这在一定程度上取决于另一个问题的答案。

无IO线程的长时间异步操作

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

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

绝对不可能用异步IO重写的情况下,那么您的最佳选择是

(a) ThreadPool,但是如果你尝试一次租用太多的线程,它会在创建额外的线程时变得迟钝。这反过来又会影响其他使用ThreadPool的程序的运行…计时器之类的东西……讨厌的。

(b)使用你自己单独的类似线程池的解决方案,它不会受到这个固有限制。

ThreadPool不是真正用于阻塞操作的。如果你的担心是现实的,我会选择(b)。