【问题标题】:Long-Running Asynchronous Operations, Without IO threads长时间运行的异步操作,没有 IO 线程
【发布时间】:2013-04-30 18:28:54
【问题描述】:

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

我不想让线程池/工作线程在活动爆发期间都被此类操作阻塞。

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

【问题讨论】:

  • 您是否有任何理由不能拥有一个可以阻塞的 IO 工作线程池并为普通工作人员保留一个不同的池?

标签: c# .net multithreading


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    (a) 线程池,但是如果你尝试一次性租用太多线程,它会在创建额外线程时变得迟缓。这反过来又会影响使用线程池的任何其他东西的运行......计时器,那种东西......讨厌。

    (b) 使用您自己的独立 threadpool-like 解决方案,该解决方案不受此固有限制的影响。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 2011-12-25
      • 1970-01-01
      • 2022-07-12
      • 1970-01-01
      • 2011-04-15
      相关资源
      最近更新 更多