直播軟件APP開發(fā),了解過緩存一致性協(xié)議嗎
緩存一致性協(xié)議也被稱為MESI,現(xiàn)在直播軟件APP開發(fā)一般是多CPU和多核的,很容易出現(xiàn)多個CPU同一時間訪問一個變量的情況,而MESI就是為了解決這個變量問題的,保證直播軟件APP開發(fā)數(shù)據(jù)一致性的問題。
?

一、MESI的四種狀態(tài)
1、M,已修改,代表緩存行里面的數(shù)據(jù)已經(jīng)被修改了,后續(xù)會寫到內(nèi)存中
2、E,獨占,代表該數(shù)據(jù)只能被直播軟件APP開發(fā)的CPU或者該核緩存,不存在多個CPU或者多個核同時操作的情況
3、S,共享,代表該數(shù)據(jù)可以被多個CPU或者多核緩存,存在多個CPU或者多個核同時操作的情況
4、I,已失效,代表該緩存行里面的數(shù)據(jù)已經(jīng)失效了,也就是被其他CPU或者核已經(jīng)修改掉了
?

二、針對MESI的優(yōu)化
緩存一致性信息傳遞是需要時間的,就導(dǎo)致其切換時會產(chǎn)生延遲,當(dāng)一個緩存被切換狀態(tài)時其他緩存受到消息完成各自的切換并且發(fā)出回應(yīng)消息,那直播軟件APP開發(fā)需要等待所有緩存響應(yīng)完成,可能會出現(xiàn)阻塞,導(dǎo)致各種各樣的性能問題和穩(wěn)定性問題。
解決方法在于:在直播軟件APP開發(fā)某個CPU修改變量后,會去通知其他用到了該變量的CPU,其他用到了該變量的CPU收到通知后,會將自己的備份數(shù)據(jù)放到一個失效隊列中,然后立刻發(fā)送修改的CPU一個通知,等確定其他CPU都收到后,發(fā)送的那個就會將數(shù)據(jù)丟掉。
?

三、緩存行的偽共享
1、偽共享是什么。首先CPU緩存系統(tǒng)中是以緩存行為單位儲存的,目前直播軟件APP開發(fā)主流的CPU大小是固定的,在多線程情況下,如果需要修改共享同一個緩存行的變量,就會影響到彼此之間的性能
2、如何解決偽共享。給直播軟件APP開發(fā)加上一個注解的類會自動補齊緩存行,需要注意的是此注解默認是無效的,需要在jvm啟動時才會生效
聲明:以上內(nèi)容為云豹科技作者本人原創(chuàng),未經(jīng)作者本人同意,禁止轉(zhuǎn)載,否則將追究相關(guān)法律責(zé)任