新聞中心
如何實現(xiàn)一個線程池,使用線程池的優(yōu)點c++?
linux c 并沒有自帶的線程池,純C的線程池很少

成都創(chuàng)新互聯(lián)是一家專注于網(wǎng)站設計、成都網(wǎng)站建設與策劃設計,吉陽網(wǎng)站建設哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設十多年,網(wǎng)設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:吉陽等地區(qū)。吉陽做網(wǎng)站價格咨詢:18982081108
1:使用glib的線程池,gthreadpool,這個是linux C 下面的一個線程池實現(xiàn),可以用于生產環(huán)境。
2:自己設計線程池,但是設計一個工業(yè)強度的線程池是一件非常復雜的事情,尤其用C來實現(xiàn)。一般思路就是建立一個線程池管理函數(shù),一個線程函數(shù)并創(chuàng)建一組線程,一個全局的線程狀態(tài)數(shù)組,線程管理函數(shù)通過全局線程狀態(tài)數(shù)組來分派任務,線程函數(shù)更改自己的線程狀態(tài)來上報自己的運行情況,實現(xiàn)起來還是相當復雜的。 建議不要重復造輪子,直接使用現(xiàn)有的線程池實現(xiàn),glib是很好的選擇。
什么是線程池,如何使用,為什么要用?
線程池,thread pool,是一種線程使用模式,線程池維護著多個線程,等待著監(jiān)督管理者分配可并發(fā)執(zhí)行的任務。功能:應用程序可以有多個線程,這些線程在休眠狀態(tài)中需要耗費大量時間來等待事件發(fā)生。其他線程可能進入睡眠狀態(tài),并且僅定期被喚醒以輪循更改或更新狀態(tài)信息,然后再次進入休眠狀態(tài)。為了簡化對這些線程的管理,.NET框架為每個進程提供了一個線程池,一個線程池有若干個等待操作狀態(tài),當一個等待操作完成時,線程池中的輔助線程會執(zhí)行回調函數(shù)。線程池中的線程由系統(tǒng)管理,程序員不需要費力于線程管理,可以集中精力處理應用程序任務。擴展資料:應用范圍1、需要大量的線程來完成任務,且完成任務的時間比較短。 WEB服務器完成網(wǎng)頁請求這樣的任務,使用線程池技術是非常合適的。因為單個任務小,而任務數(shù)量巨大,你可以想象一個熱門網(wǎng)站的點擊次數(shù)。 但對于長時間的任務,比如一個Telnet連接請求,線程池的優(yōu)點就不明顯了。因為Telnet會話時間比線程的創(chuàng)建時間大多了。2、對性能要求苛刻的應用,比如要求服務器迅速響應客戶請求。3、接受突發(fā)性的大量請求,但不至于使服務器因此產生大量線程的應用。突發(fā)性大量客戶請求,在沒有線程池情況下,將產生大量線程,雖然理論上大部分操作系統(tǒng)線程數(shù)目最大值不是問題,短時間內產生大量線程可能使內存到達極限,并出現(xiàn)"OutOfMemory"的錯誤。
一、線程池的作用:
線程池作用就是限制系統(tǒng)中執(zhí)行線程的數(shù)量。
根據(jù)系統(tǒng)的環(huán)境情況,可以自動或手動設置線程數(shù)量,達到運行的最佳效果;少了浪費了系統(tǒng)資源,多了造成系統(tǒng)擁擠效率不高。用線程池控制線程數(shù)量,其他線程排隊等候。一個任務執(zhí)行完畢,再從隊列的中取最前面的任務開始執(zhí)行。若隊列中沒有等待進程,線程池的這一資源處于等待。當一個新任務需要運行時,如果線程池中有等待的工作線程,就可以開始運行了;否則進入等待隊列。
二、如何使用:
要配置一個線程池是比較復雜的,尤其是對于線程池的原理不是很清楚的情況下,很有可能配置的線程池不是較優(yōu)的,因此在Executors類里面提供了一些靜態(tài)工廠,生成一些常用的線程池。
1. newSingleThreadExecutor創(chuàng)建一個單線程的線程池。這個線程池只有一個線程在工作,也就是相當于單線程串行執(zhí)行所有任務。如果這個唯一的線程因為異常結束,那么會有一個新的線程來替代它。此線程池保證所有任務的執(zhí)行順序按照任務的提交順序執(zhí)行。
2.newFixedThreadPool創(chuàng)建固定大小的線程池。每次提交一個任務就創(chuàng)建一個線程,直到線程達到線程池的最大大小。線程池的大小一旦達到最大值就會保持不變,如果某個線程因為執(zhí)行異常而結束,那么線程池會補充一個新線程。
3. newCachedThreadPool創(chuàng)建一個可緩存的線程池。如果線程池的大小超過了處理任務所需要的線程,那么就會回收部分空閑(60秒不執(zhí)行任務)的線程,當任務數(shù)增加時,此線程池又可以智能的添加新線程來處理任務。此線程池不會對線程池大小做限制,線程池大小完全依賴于操作系統(tǒng)(或者說JVM)能夠創(chuàng)建的最大線程大小。4.newScheduledThreadPool創(chuàng)建一個大小無限的線程池。此線程池支持定時以及周期性執(zhí)行任務的需求。
到此,以上就是小編對于windows線程池實現(xiàn)的問題就介紹到這了,希望這2點解答對大家有用。
分享文章:如何實現(xiàn)一個線程池,使用線程池的優(yōu)點c++?(cwindows線程池)
當前網(wǎng)址:http://fisionsoft.com.cn/article/dhhoesp.html


咨詢
建站咨詢
