當前位置:編程學習大全網 - 源碼下載 - IOCP和線程池是什麽關系?

IOCP和線程池是什麽關系?

對於IOCP,創建壹定數量的工作線程是必要的,但沒有必要提前創建。

通常,系統會提示您創建cpu內核數為x2+2的工作線程。

但是請註意:這只是壹般情況。

壹個線程是否足夠高效取決於它做了什麽和等待了什麽。

線程在執行壹些阻塞操作時會等待,比如等待硬盤I/O,等待串行數據,等待SQL查詢結果...

當工作線程被阻塞等待時,操作系統會切換上下文,選擇並把執行權交給另壹個“饑渴”的線程。

想象壹個場景:當您的IOCP系統啟動時,創建了10個工作線程。在某個時刻(比如過年的時候,大家都在發短信,妳的系統需要通過串口向短信調制解調器發送和接收數據),大量的串行數據發送和接收的請求連接到系統,所有的10工作線程全部排隊通過壹個串行短信機接收和發送消息。目前,新的請求無法及時處理,但是您的系統。只能處理數據的工作線程已耗盡。

這種情況怎麽處理?

這時候妳就要考慮“線程池”的管理模式了。

線程池管理器判斷當前工作線程是否仍然空閑(獲取GetQueuedCompletionStatus時應該是空閑的)。如果沒有足夠的空閑線程(這取決於邏輯,例如,目前只有0或2個空閑線程),那麽管理器應該立即創建壹個新的工作線程。如果有太多空閑線程(例如,有20個空閑線程),管理員應該關閉冗余線程(PostqueuedCompletionStatus(my _ msg _ exit))。

至於妳的疑問:在使用IOCP的時候,不是需要提前創建壹定數量的線程嗎?壹旦創建了所有這些線程,是不是就相當於創建了壹個線程池?

這些工作線程是提前創建的,不能根據實際需要增減,只能稱為線程組,並不是線程池。

此外,IOCP不必在啟動時創建壹定數量的工作線程,可以全部交給線程池進行判斷和管理。啟動後,當線程池判斷沒有足夠的空閑工作線程時,它會立即創建它們。

  • 上一篇:簡述壹下Java中的web容器,舉幾個例子也行
  • 下一篇:高中作文素材:考場作文素材參考
  • copyright 2024編程學習大全網