1.線程池ThreadPool的基本定義?
線程池是一種多線程處理形式,處理過程中將任務(wù)添加到隊(duì)列,然后在創(chuàng)建線程后自動(dòng)啟動(dòng)這些任務(wù)。線程池線程都是后臺(tái)線程。每個(gè)線程都使用默認(rèn)的堆棧大小,以默認(rèn)的優(yōu)先級(jí)運(yùn)行,并處于多線程單元中。如果某個(gè)線程在托管代碼中空閑(如正在等待某個(gè)事件),則線程池將插入另一個(gè)輔助線程來使所有處理器保持繁忙。如果所有線程池線程都始終保持繁忙,但隊(duì)列中包含掛起的工作,則線程池將在一段時(shí)間后創(chuàng)建另一個(gè)輔助線程但線程的數(shù)目永遠(yuǎn)不會(huì)超過最大值。超過最大值的線程可以排隊(duì),但他們要等到其他線程完成后才啟動(dòng)。
2.線程池的背景及作用?
線程池是用來解決多任務(wù)并發(fā),頻繁創(chuàng)建線程和銷毀線程導(dǎo)致資源的浪費(fèi)和效率低下的一種技術(shù)。類似于數(shù)據(jù)庫(kù)連接池,這種池化技術(shù)用于將部分資源重復(fù)利用,或者說是用已有的資源對(duì)多個(gè)任務(wù)進(jìn)行服務(wù)。線程池就是創(chuàng)建固定的線程數(shù)量,服務(wù)于并發(fā)的任務(wù),避免每一個(gè)任務(wù),系統(tǒng)都進(jìn)行線程的創(chuàng)建和銷毀,增加系統(tǒng)的負(fù)擔(dān),線程數(shù)量過多時(shí)會(huì)造成內(nèi)存溢出。
3.線程池的運(yùn)用場(chǎng)景:
頻繁的任務(wù)創(chuàng)建,快速的任務(wù)響應(yīng),同等的任務(wù)優(yōu)先級(jí)。如果需要很長(zhǎng)時(shí)間才有一個(gè)任務(wù)需要執(zhí)行,那樣創(chuàng)建線程池就是浪費(fèi)資源,如果執(zhí)行一個(gè)任務(wù)需要幾個(gè)小時(shí),那這個(gè)任務(wù)在線程池中執(zhí)行一次就會(huì)阻塞大量的線程。任務(wù)的優(yōu)先級(jí)在線程池沒有作用,因?yàn)榫€程池的任務(wù)執(zhí)行順序是隊(duì)列。如果我們需要執(zhí)行的任務(wù)有輕重緩急,那么不建議使用線程池。