2013-04-30 56 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)。