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

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


咨詢
建站咨詢
