多核cpu處理任務(wù)是并發(fā)還是并行 在多核CPU下,同一進(jìn)程下的多個(gè)線(xiàn)程可以并行運(yùn)行嗎?
在多核CPU下,同一進(jìn)程下的多個(gè)線(xiàn)程可以并行運(yùn)行嗎?CPU在某一時(shí)刻只能執(zhí)行一個(gè)線(xiàn)程,但多線(xiàn)程并不是因?yàn)槎嗪嘶蛘唠p核而被稱(chēng)為多線(xiàn)程。是因?yàn)楫?dāng)多個(gè)線(xiàn)程并行執(zhí)行時(shí),CPU會(huì)按照一定的線(xiàn)程調(diào)度算法頻繁切換線(xiàn)
在多核CPU下,同一進(jìn)程下的多個(gè)線(xiàn)程可以并行運(yùn)行嗎?
CPU在某一時(shí)刻只能執(zhí)行一個(gè)線(xiàn)程,但多線(xiàn)程并不是因?yàn)槎嗪嘶蛘唠p核而被稱(chēng)為多線(xiàn)程。是因?yàn)楫?dāng)多個(gè)線(xiàn)程并行執(zhí)行時(shí),CPU會(huì)按照一定的線(xiàn)程調(diào)度算法頻繁切換線(xiàn)程。當(dāng)一個(gè)正在執(zhí)行的線(xiàn)程需要IO操作或內(nèi)存訪(fǎng)問(wèn)時(shí),CPU可以完全放棄該線(xiàn)程,轉(zhuǎn)而調(diào)度線(xiàn)程就緒隊(duì)列上的其他線(xiàn)程,被放棄的線(xiàn)程將進(jìn)入阻塞狀態(tài)。IO操作或內(nèi)存訪(fǎng)問(wèn)操作完成后,線(xiàn)程可以進(jìn)入線(xiàn)程就緒隊(duì)列。人們通常指的是多線(xiàn)程,因?yàn)镃PU是按照一定的線(xiàn)程調(diào)度算法來(lái)切換線(xiàn)程的,所以在一段時(shí)間內(nèi),可以看到很多線(xiàn)程在并發(fā)執(zhí)行。實(shí)際上,在某個(gè)時(shí)間點(diǎn)只有一個(gè)線(xiàn)程在運(yùn)行。
多核心CPU在同一時(shí)刻真的能同時(shí)執(zhí)行多個(gè)線(xiàn)程嗎?多核心CPU是真正意義上的多個(gè)物理CPU嗎?
與超線(xiàn)程CPU在邏輯上模擬雙核不同,多核CPU可以獨(dú)立執(zhí)行一個(gè)線(xiàn)程,是真正的多物理CPU。
其次,如果你的程序中線(xiàn)程的數(shù)量小于CPU核的數(shù)量,并且系統(tǒng)中沒(méi)有其他進(jìn)程同時(shí)運(yùn)行,那么這個(gè)程序的每個(gè)線(xiàn)程都會(huì)享有一個(gè)CPU。當(dāng)同時(shí)運(yùn)行的線(xiàn)程數(shù)大于CPU核數(shù)時(shí),CPU會(huì)采用一定的調(diào)度算法,每隔一定時(shí)間將這些線(xiàn)程調(diào)入或調(diào)出CPU,以保證每個(gè)線(xiàn)程都能共享部分CPU時(shí)間,實(shí)現(xiàn)多線(xiàn)程并發(fā)。
cms和g1區(qū)別?
CMS收集器的目標(biāo)是獲得最短的恢復(fù)暫停時(shí)間?;?"馬克-清除 "算法,其操作過(guò)程如下:
1)初始標(biāo)記2)同時(shí)標(biāo)記3)重新標(biāo)記4)同時(shí)清除
初始標(biāo)記和重新標(biāo)記這兩個(gè)步驟仍然需要 "停止世界 "。初始標(biāo)記只標(biāo)記GC根可以直接關(guān)聯(lián)的對(duì)象,容易閱讀。并發(fā)標(biāo)記階段是為了追蹤GC根,而重新標(biāo)記階段是為了糾正那些由于用戶(hù)程序的繼續(xù)運(yùn)行而導(dǎo)致標(biāo)記被移動(dòng)的對(duì)象的標(biāo)記記錄。這一階段的停頓時(shí)間一般比初始標(biāo)記階段稍長(zhǎng),但遠(yuǎn)短于并發(fā)標(biāo)記。
優(yōu)點(diǎn):并發(fā)采集,暫停低。
缺點(diǎn):
1)CMS收集器對(duì)CPU資源非常敏感。在并發(fā)階段,雖然不會(huì)導(dǎo)致用戶(hù)線(xiàn)程停止,但是會(huì)因?yàn)檎加昧瞬糠志€(xiàn)程而導(dǎo)致應(yīng)用變慢,降低總吞吐量。
2)CMS收集器can t處理漂浮的垃圾,以及 "并發(fā)模式故障 "這可能會(huì)導(dǎo)致生成完整的GC。
3)CMS是由 "馬克-清除 "算法,這就容易產(chǎn)生大量的空間碎片。當(dāng)有太多的太空垃圾時(shí),會(huì)給大型對(duì)象的分配帶來(lái)很大的麻煩。經(jīng)常會(huì)出現(xiàn)這樣的情況,陳年還有很多空間,但是沒(méi)有足夠的連續(xù)空間來(lái)分配當(dāng)前對(duì)象,所以不得不提前觸發(fā)滿(mǎn)GC。
2.G1收藏家
G1是服務(wù)器應(yīng)用程序的垃圾收集器。G1有以下特點(diǎn):
1.并行并發(fā):G1可以充分利用CPU和多核環(huán)境的硬件優(yōu)勢(shì),使用多個(gè)CPU(CPU或CPU核)來(lái)縮短stop-The-World暫停時(shí)間。其他一些收集器最初需要暫停java線(xiàn)程執(zhí)行的GC動(dòng)作,G1收集器仍然可以讓Java程序以并發(fā)繼續(xù)執(zhí)行。
2.代收集(Generation collection ):雖然G1可以獨(dú)立管理整個(gè)GC堆,而不需要其他收集器的合作,但它仍然保留了代的概念。它可以用不同的處理新創(chuàng)建的對(duì)象和在GC中存活了一段時(shí)間的舊對(duì)象,以獲得更好的收集結(jié)果。
3.空間整合:不同于 "標(biāo)記-清潔與保養(yǎng)G1 CMS算法是一個(gè)基于 "標(biāo)記-清潔和保養(yǎng)算法。在本地,它是基于 "復(fù)制 "算法。
4.可預(yù)測(cè)的停頓:這是G1相對(duì)于CMS的另一大優(yōu)勢(shì)。減少停頓時(shí)間是G1和CMS共同關(guān)心的問(wèn)題,但G1不僅可以追求低停頓,還可以建立一個(gè)可預(yù)測(cè)的停頓時(shí)間模型,讓用戶(hù)在一個(gè)長(zhǎng)度為m毫秒的時(shí)間段內(nèi)明確指定。
5、G1操作步驟:
1.初始標(biāo)記;2.并發(fā)標(biāo)記;3.最終標(biāo)記;4.篩選和回收
以上步驟的操作流程與CMS有很多相似之處。
初始標(biāo)記階段只標(biāo)記GC根可以直接關(guān)聯(lián)的對(duì)象,并修改TAMS的值,這樣當(dāng)用戶(hù)程序在下一階段并發(fā)運(yùn)行時(shí),可以在正確可用的區(qū)域創(chuàng)建新的對(duì)象。這個(gè)階段需要停止線(xiàn)程,但是需要的時(shí)間很短。
并發(fā)標(biāo)記階段是從GC根開(kāi)始分析堆中對(duì)象的可達(dá)性,找出幸存的對(duì)象。這個(gè)階段需要很長(zhǎng)時(shí)間,但它可以與用戶(hù)程序同時(shí)執(zhí)行。
最后一個(gè)打標(biāo)階段是糾正打標(biāo)記錄中因用戶(hù)程序在并行打標(biāo)期間持續(xù)運(yùn)行而發(fā)生變化的部分。虛擬機(jī)將這段時(shí)間的對(duì)象變化記錄在線(xiàn)程記憶集日志中,記憶集日志的數(shù)據(jù)需要在最后的標(biāo)記階段合并到記憶集日志中。在最后的標(biāo)記階段,需要將記憶集日志的數(shù)據(jù)合并到記憶集中。這個(gè)階段需要停止線(xiàn)程,但是可以并行執(zhí)行。
最后,在篩選回收階段,首先根據(jù)用戶(hù)期望的GC暫停時(shí)間對(duì)每個(gè)區(qū)域的回收價(jià)值和成本進(jìn)行排序制定回收計(jì)劃。