請問IOCP和執行緒池的關係

2024-12-28 06:05:18 字數 1013 閱讀 5811

1樓:網友

對於iocp來說,建立一定數量的工作執行緒是必要的,但不是必須預先建立。

通常的資料中會提示您建立cpu核心數x2+2數量的工作者執行緒。

但是請注意:這只是一般情況。

乙個執行緒執行效率是否夠高,要看它做了什麼和等待了什麼。

執行緒在執行一些阻塞操作的時候是會進行等待的,比如等待硬碟i/o,等待串列埠資料,等待sql查詢結果……

在工作執行緒被阻塞並等待時,作業系統會切換context,選擇並將執行權力交給另乙個「飢餓」執行緒。

試想乙個場景:您的iocp系統啟動時建立了10個工作執行緒,當某一時刻(比如過年大家都在發簡訊,而您的系統需要通過串列埠向簡訊modem傳送和接收資料)大量的需要進行串列埠資料收發的請求被連入系統,所有10個工作執行緒全部被排隊阻塞在串列埠簡訊機收發動作上,這時新的請求就無法及時處理,但您系統的cpu資源其實還有很大富餘。只是能夠對資料進行處理的工作者執行緒已經被耗盡。

這個情況該怎麼處理呢?

這時您就應當考慮「執行緒池」的管理模式了。

由執行緒池管理者判斷當前工作執行緒是否還有空閒的(getqueuedcompletionstatus時應屬於空閒)。如果空閒執行緒已經不足(這個取決於邏輯,比如當前只有0個或2個空閒執行緒),那麼管理者應立即建立新的工作者執行緒。如果空閒執行緒太多(比如有20個空閒的),管理者應將多餘的執行緒關閉(postqueuedcompletionstatus(my_msg_exit))。

至於您的疑惑:在用iocp的時候不就是要預先建立一定數量的執行緒嗎,一旦這些執行緒全部建立完畢,是不是就等價於已經建立了乙個執行緒池了?

預先建立並且不能夠根據實際需要增加和減少的這些工作執行緒,只能稱為執行緒組,它們並不是執行緒池。

另外,iocp也並不是必須在啟動時建立一定數量工作執行緒的,完全可以全部都交給執行緒池進行判斷和管理。啟動後當執行緒池判斷空閒工作者不足,則立即進行建立動作。

2樓:不期而遇的感傷

windows自帶的一套執行緒池api,貌似就已經整合了iocp的機制,我的理解就是,直接使用執行緒池就能一了百了了。

請問多處理器與多核,多執行緒是什麼關係

簡單通俗的話來介紹。多路處理器是伺服器上的技術,就是多個cpu,cpu最初發展的時候是專一個cpu一個處理核心屬,cpu的效能主要靠提高核心工作頻率來提高,由於物理限制,不能把cpu的核心無限提高頻率,所以發展出來雙核心的cpu。兩個核心一起工作需要靠軟體的支援。軟體要明白怎麼把任務分給兩個核心讓他...

現金池的企業管理,資金池和現金池的區別

什麼是對公現金管理業務的現金池?中國銀行對公現金管理的現金池產品包括 實體現金池,指集團內多個成員單位的銀行賬戶資金通過歸集方式實際轉移到乙個指定的核心賬戶中,可實現集團內部資金實時和定時歸集下撥 虛擬現金池,指將集團內部成員的資金資訊實時彙總,而實際資金只在每日末歸集,由集團總部管理者對集中後的資...

Intel的超執行緒和AMD的開4核有什麼區別啊

超執行緒,打個比方,i3 的u是雙核心四執行緒,就是有兩個原生核心再加上兩個處理通道。這樣就方便多檔案的快速處理。但是在怎麼超執行緒也沒有原生核心好。amd開核說的是有四個原生核心,但是在生產線上沒達到amd的四核心要求,所以就遮蔽了一個核心,變成了三核心。這樣可以節約成本。雙核四執行緒,與四核四執...