執行緒池服務程式設計

2021-06-09 15:01:21 字數 617 閱讀 8306

1)原理分析

執行緒池的核心設計思想是系統在初始化時,建立一定數量的服務執行緒,並使他們處於空閒狀態,若當前有新使用者到來,則系統先查詢當前有無空閒執行緒,若有則立即為其分配服務執行緒,如沒有,則將新使用者加入待服務佇列,並在其他使用者結束服務時,再重新為其分配服務執行緒。

新使用者如果在等待服務佇列裡的時間過長,會影響使用者體驗。

方法:1、動態建立新服務執行緒,服務結束後,該執行緒加入到線性池,但大量的使用者下,使執行緒池變得很大,最後因資源消耗過多。2、在1的基礎上增加執行緒資源**機制。當執行緒規模達到一定程度,會主動殺死一些程序。

該系統簡單的設計方案:

1、系統在初始化時,開闢max_num個執行緒(max_num是個巨集,預設20)組成服務執行緒池

2、每個執行緒均分為有兩個狀態,乙個是空閒狀態,另乙個是工作狀態,每個執行緒均有一塊屬於自己的公共資料區域,這塊資料區域中存放兩個變數,其中乙個變數標記自身狀態,0則表示處於空閒狀態;1則為工作狀態。另乙個變數對應客戶端的套接字型大小,如果執行緒處於空閒狀態,則套接字型大小為0;

3、有新使用者到來時,系統通過查詢公共資料區域,判斷當前是否有空閒執行緒,若有則直接為其分配服務執行緒。

4、若當前沒有空閒程式,系統將不做任何處理,提示當前系統忙,關閉新客戶套接字。

待續……

高效能伺服器程式設計 程序池 執行緒池

高效能伺服器程式設計主要分為多程序和多執行緒 程序池和執行緒池,用來處理乙個服務程式能夠同時處理多個客戶連線的問題。我們首先回顧下多程序和多執行緒的知識,因為程序池和執行緒池是在這個基礎上進行改進的,也是伺服器用的比較多的。多程序 accept 建立子程序,由子程序和客戶端通訊。父程序繼續接受客戶連...

高效能伺服器程式設計 執行緒池

在我們之前所講述過的以poll方式實現tcp伺服器流程,我們仔細研究一下會發現,客戶端的資料我們還是以序列的方式來處理的。由此我們提出了以多程序或者多執行緒的方式來加以實現是不是會更好。比如採用多程序的方式 但是這種方式還是會有bug出現,比如有僵死程序的情況出現和建立程序的代價很大等情況發生。此處...

執行緒池程式設計示例

示例 include include include include include include typedef struct workercthread worker 執行緒池結構 typedef struct cthread pool int pool add worker void pro...