Issue:?
? ? 每條指令都是在cpu中執(zhí)行蟹演,數(shù)據(jù)存放在主內(nèi)存中
? ? 但是cpu執(zhí)行速度越來越快粪狼,內(nèi)存的讀寫速度跟不上cpu的速度
Solution:
? ? 在cpu和主存之間加高速緩存(速度快逸寓,內(nèi)存小儒旬,昂貴)
緩存: 一級緩存贡必, 二級緩存某筐,三級緩存究孕。查找時(shí)逐級遞增
訪問緩存問題:
? ? **單核cpu, 多線程**? 多個(gè)線程同時(shí)訪問進(jìn)程中的共享數(shù)據(jù)啥酱。任何時(shí)刻都只能有一個(gè)線程在執(zhí)行,因此不會出現(xiàn)緩存訪問沖突厨诸。????
? ? **多核cpu, 多線程** 由于多核是可以并行的镶殷,可能會出現(xiàn)多個(gè)線程同時(shí)寫各自的緩存的情況,可能會出現(xiàn)緩存數(shù)據(jù)不同的情況微酬。
為了解決原子性绘趋,可見性,有序性問題颗管,所以出現(xiàn)了內(nèi)存模型陷遮。
內(nèi)存模型定義了共享內(nèi)存系統(tǒng)中多線程程序讀寫操作行為的規(guī)范
? ? 1. 所有的變量都存儲在主內(nèi)存中
? ? 2. 每條線程有自己的工作內(nèi)存
? ? 3. 線程的工作內(nèi)存中保存了該線程中是用到的變量的主內(nèi)存福本拷貝
? ? 4. 線程對變量的所有操作都必須在工作內(nèi)存中進(jìn)行,而不能直接讀寫主內(nèi)存
? ? 5. 不同線程之間無法直接訪問對方工作內(nèi)存中的變量
JMM作用于工作內(nèi)存和主存之間的數(shù)據(jù)同步過程垦江。規(guī)定了數(shù)據(jù)如何同步以及什么時(shí)候做數(shù)據(jù)同步