欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

為什么Java堅(jiān)持多線程不選擇協(xié)程?

從java被發(fā)明的第一天起,就被定義為一個(gè)多線程的網(wǎng)絡(luò)編程語(yǔ)言。Java最大特點(diǎn)并不是跨平臺(tái),而是它的多線程模型(那時(shí)候的C++中,并沒(méi)有我們現(xiàn)在看到的thread,C#還沒(méi)有出來(lái))。因?yàn)榻甑能浖袠I(yè)的增長(zhǎng)主要來(lái)自網(wǎng)絡(luò)編程,網(wǎng)絡(luò)編程最常見的模型就是client/server,也就是所謂的C/S,這種編程模型在服務(wù)器端需要同時(shí)接受客戶端的請(qǐng)求,也就是說(shuō)要有很好的并發(fā)特性--這個(gè)特性主要依賴多線程來(lái)實(shí)現(xiàn)。而java的主戰(zhàn)場(chǎng)就是服務(wù)器端編程。所以多線程對(duì)java是極為重要,不可或缺的一環(huán)。

當(dāng)我們希望引入?yún)f(xié)程,我們想解決什么問(wèn)題。我想不外乎下面幾點(diǎn):

節(jié)省資源,輕量,具體就是:節(jié)省內(nèi)存,每個(gè)線程需要分配一段棧內(nèi)存,以及內(nèi)核里的一些資源節(jié)省分配線程的開銷(創(chuàng)建和銷毀線程要各做一次syscall)節(jié)省大量線程切換帶來(lái)的開銷與NIO配合實(shí)現(xiàn)非阻塞的編程,提高系統(tǒng)的吞吐使用起來(lái)更加舒服順暢(async+await,跑起來(lái)是異步的,但寫起來(lái)感覺上是同步的)我們分開來(lái)講下。

先說(shuō)內(nèi)存。拿JavaWeb編程舉例子,一個(gè)tomcat上的woker線程池的最大線程數(shù)一般會(huì)配置為50~500之間(目前springboot的默認(rèn)值給的200)。也就是說(shuō)同一時(shí)刻可以接受的請(qǐng)求最多也就是這么多。如果超過(guò)了最大值,請(qǐng)求直接打失敗拒絕處理。假如每個(gè)線程給128KB,500個(gè)線程放一起的內(nèi)存占用量大概是60+MB。如果真的有瓶頸,也許CPU,IO,帶寬,DB的CPU等會(huì)有瓶頸,但這點(diǎn)內(nèi)存量的增幅對(duì)于動(dòng)輒數(shù)個(gè)GB的Java運(yùn)行時(shí)進(jìn)程來(lái)說(shuō)似乎并不是什么大問(wèn)題。