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

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


咨詢(xún)
建站咨詢(xún)
