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