2008-12-17 35 views
1

我正在搜索互聯網上的自定義線程池實現。 我找到了一個使用IOCP的實現。我想知道使用它們有什麼好處?他們提供盜竊工作,或類似的東西,我真的可以找到答案...自定義線程池中的IOCP

+1

也許你可以添加鏈接到你找到的自定義線程池實現? – 2009-01-13 17:51:44

回答

7

IOCP =「IO完成端口」。它是內置於Windows操作系統中的內核對象,可爲您提供管理多線程異步IO的智能方式。

在非常簡單化(以及稍微過度簡化)的術語中,您告訴IOCP您要完成的IO作業。它將異步執行它們並保持每個作業結果的隊列。您立即返回通知IOCP有關作業的呼叫(在IO發生時它不會阻止)。您將返回一個概念上類似於.NET IAsyncResult的對象......它可以讓您在選擇時阻止,或者您可以提供回調,或者可以定期輪詢以查看作業是否完成。

在做這些工作時,IOCP使用線程池。線程池嘗試將線程數限制爲處理器數量或更少(這是可配置的,但意圖和默認設置將其限制爲處理器數量)。但是,IOCP規定有時這些線程上的任務可能會被阻塞。 Asycn IO任務不會阻塞,但您可能已經提供了其他一些任務。因此,您可以爲IOCP提供另一個數字......這是「正常最大值」之上的多個線程,由於其他線程中的一個線程被阻塞,允許IOCP上升。目標是達到實際做某些事情(即不被阻止)的線程的「通常最大值」。如果發生這種情況,那麼一段時間內IOCP將使用比通常的最大線程更多的線程,但它會拒絕創建任何新線程,直到它回到「通常的最大值」。

這是一個簡單的總結,只是概念性的,正如我所說的,在某些方面過於簡化。但它應該給你一個總的想法。 Jeffrey Richter在Windows操作系統上的書籍詳細介紹了這些內容(但這些書已經絕版了)。你可以找到這些使用的書籍,而且實際上它們比原來使用的花費更多。我認爲「高級Windows」是你想要的標題,但是可能有一本書的更新版本帶有不同的標題。

+0

偉大的描述。謝謝! – John 2009-04-25 14:22:18

0

如果您打算在工作線程中使用Windows IO功能,則可以使用IOCP實現。 IO功能可以讀/寫到磁盤或網絡。

查看推送框架http://www.pushframework.com查看實時服務器實現的IOCP用法。