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