1. 程式人生 > >併發,高併發,CPU多級快取概念

併發,高併發,CPU多級快取概念

一、併發與高併發概念

併發:同時有多個執行緒,【交替】被CPU執行。

高併發:保證系統能同時並行處理很多請求的【設計】。

可以看到,當談論併發的時候,我們關注的是多個執行緒操作相同的資源時,如何保證執行緒安全,合理利用資源;而談論高併發時,我們關注的是如果系統在短時間內遇到大量請求(比如淘寶雙十一),那麼我們如何提高系統的效能(包括硬體、網路、系統架構、開發語言等等)。

二、CPU多級快取

(1)主存、快取記憶體、CPU核心的關係


之所以需要快取,是因為主存跟不上CPU頻率,所以CPU常常等待主存,而cache就是緩解這種速度間的不匹配問題。

(2)CPU多級快取之快取一致性(MESI)

快取一致性(MESI)是為了保證CPU多級快取的共享一致性。

MESI定義了四種狀態,也就是CPU對四種操作產生不一致的狀態。快取控制器監聽到本地操作和遠端操作的時候,需要對cache做出修改,從而保證資料在cache之間的一致性。


Mmodified被修改。該快取行只被快取在CPU的快取中,並且是被修改過的,因此它與主存中的資料是不一致的,該快取行的記憶體需要在某個時間點寫回主存,這個時間點是允許其他CPU讀取主內相應的記憶體之前。當這裡的值被寫回主存之後,該快取行會變成E狀態。

Eexclusive獨享。該快取行只被快取在該CPU快取中,是未被修改過的,與主存中資料一致的。這個狀態可以在任何時刻,當有其他CPU讀取該快取行時,變成S狀態。當CPU修改該快取行內容時,該狀態可以變成

M狀態。

Sshared共享。該快取行可能被多個CPU快取,並且各個快取的資料和主存的資料一致,當有一個CPU修改該快取行的時候,其他CPU從該快取行是可以被作廢的,變成I狀態。

Iinvalid無效的。這個快取是無效的,可能是其他CPU修改了該快取。

四種操作:

Local read:讀本地快取中的資料

Local write:將資料寫到本地的快取中

Remote read:將記憶體的資料讀取過來

Remote write:將資料寫回到主存中

在一個有多核的系統中,每一個核都有自己的快取來共享主存匯流排,每個CPU會發出讀寫請求,而快取的目的是為了減少CPU讀寫共享主存的次數。

一個快取除了在I狀態之外都可以滿足

CPU的讀請求。

一個寫請求只有在ME狀態下才能執行。如果處在S狀態,必須先將該快取中快取行變成I狀態。通常通過廣播方式執行。不允許多個CPU修改同一個快取行,即使修改該快取行不同的資料也是不允許的。

一個處於M狀態的快取行,必須監聽所有試圖讀快取行的操作,這種操作必須在快取將快取行寫回到主存,並將狀態變回S狀態之前被延遲執行。

一個處於S狀態的快取行,也必須監聽其他快取使改快取行無效或者獨享該快取行的請求並將快取行變成無效。

一個處於E狀態的快取行,要監聽其他快取讀快取中該快取行的操作,一旦有該快取行的操作,它就會變成S狀態。

對於ME兩種狀態而言,資料總是精確的,和快取行的真正狀態是一致的,S狀態可能是非一致的,如果一個快取將處於S狀態的快取行作廢,另一個快取可能已經獨享了該快取行,但是該快取卻不會將快取行升為E狀態,因為其他快取不會廣播它們作廢掉該快取行的通知。由於快取並沒有儲存該快取行的copy數量,因此也沒辦法確定自己是否獨享了該快取行。

E更像一個投機性的優化,因為一個CPU想修改一個S狀態的快取行,匯流排事務需要將所有該快取行copy的值變成I狀態,但修改E狀態的快取,卻不需要匯流排事務。

接下來,我們一起看一下CPU多級快取的亂序執行優化。

(3)CPU多級快取之亂序執行優化

它的意思就是說,CPU為了提高運算速度打亂了程式碼的執行順序。

比如:


這裡就有兩種執行順序:a.將a賦值為2,再將b賦值為3,最後計算a*b;b.將b賦值為3,再將a賦值為2,最後計算a*b,在單核單執行緒是沒有問題,但是多核或者多執行緒就會出現問題。

比如我們在一個核上執行寫入操作,然後在操作最後寫一個標記來表示之前的資料已經準備好了,然後我們從另外一個核上通過判斷這個標記,來判定需要的資料是否已經就緒。那如果考慮到上面說的亂序執行優化,這種做法就存在一定風險,比如標記先被寫入,但是之前的操作並未完成,也就是這個值沒有被寫入。

這就是資料不安全,也就是我們後面要說的併發情況下,如何保證執行緒安全。


相關推薦

併發併發CPU多級快取概念

一、併發與高併發概念併發:同時有多個執行緒,【交替】被CPU執行。高併發:保證系統能同時並行處理很多請求的【設計】。可以看到,當談論併發的時候,我們關注的是多個執行緒操作相同的資源時,如何保證執行緒安全,合理利用資源;而談論高併發時,我們關注的是如果系統在短時間內遇到大量請求

JAVA微服務架構併發高效能可用分散式叢集快取電商實戰教程下載

JAVA微服務架構,高併發,高效能,高可用,分散式,叢集,快取,電商實戰教程下載39套Java架構師,高併發,高效能,高可用,分散式,叢集,電商,快取,微服務,微信支付寶支付,公眾號開發,java8新特性,P2P金融專案,程式設計,功能設計,資料庫設計,第三方支付,web安全,效能調優,設計模式,資

併發併發程式設計實戰02--CPU多級快取-快取一致性MESI

前言上來就面試什麼多執行緒什麼東西的都是不負責任的,多執行緒,併發高併發等等從本質上來說是對硬體的操作,因此瞭解作業系統,瞭解cpu等相關知識是很有必要的。下圖是最簡單的快取記憶體的配置  CPU和快取以及主存都連在總線上快取記憶體出現後不久,主存和快取記憶體之間的速度差異越

高階java併發高效能分散式可用負載均衡系統架構實戰

Java併發程式設計(一): 併發程式設計的挑戰本文主要內容出自《Java併發程式設計的藝術》一書,是對該書內容的歸納和理解,有興趣的朋友請購買正版閱讀全部內容。 併發程式設計的目的是為了讓程式執行的更快,但是並不是啟動更多的執行緒,就能讓程式最大限度的併發執行。在進行併發程式設計時,如果希望通過多執行

阿里、百度、京東一線網際網路架構師都在用的技術體系併發微服務軟體系統架構

可以說,Java是現階段中國網際網路公司中,覆蓋度最廣的研發語言,掌握了Java技術體系,不管在成熟的大公司,快速發展的公司,還是創業階段的公司,都能有立足之地。 有不少朋友問,除了掌握Java語法,還要系統學習哪些Java相關的技術,今天分享一個,網際網路Java技術學習路線圖。 一:常見模式

多執行緒併發的情況下操作redis當中的資料如何加鎖?

多個執行緒同時去操作Redis當中的資料,假如不加鎖的情況下,會出現資料重複的問題。假如需要每次都只有一條執行緒去操作Redis當中的資料,需要給操作加上鎖。     但是去網上一搜,網上給Redis加鎖的機制都是利用Redis的setnx自身的方法去加鎖,但是這樣

Java架構師大型電商分散式叢集微服務併發專案實戰

Java架構師,高併發,高效能,高可用,分散式,叢集,電商,快取,微服務,微信支付寶支付,公眾號開發,java8新特性,P2P金融專案,程式設計,功能設計,資料庫設計,第三方支付,web安全,效能調優,設計模式,資料結構,併發程式設計,虛擬機器,中介軟體,資料庫,專案實戰,大型分散式電商專案實戰視訊教程

2018年最新JAVA架構師包含技術總綱-微服務併發分散式效能優化springmybatis底層原始碼虛擬機器基礎框架架構系統架構

2018年最新JAVA架構師包含技術總綱-微服務,高併發,分散式,效能優化,spring,mybatis底層原始碼,虛擬機器,基礎框架架構,系統架構 寫在開篇 不管是開發、測試、運維,每個技術人員心裡都有一個成為技術大牛的夢,畢竟“夢想總是要有的,萬一實現了呢”!正是對技術夢的追求,促使我們不斷地努力和提

非同步化併發大殺器

聊聊如何讓專案非同步化的一些事。 1.同步和非同步,阻塞和非阻塞 同步和非同步,阻塞和非阻塞, 這個幾個詞已經是老生常談,當時常常還是有很多同學分不清楚,以為同步肯定就是阻塞,非同步肯定就是非阻塞,其他他們不是一回事。 同步和非同步關注的是結果訊息的通訊機制 同步

怎麼算我的應用需要多少寬頻來支撐需要多少臺電腦併發級別簡述

術語說明: QPS = req/sec = 請求數/秒 QPS: 每秒鐘處理完請求的次數;注意這裡是處理完。具體是指發出請求到伺服器處理完成功返回結果。可以理解在server中有個counter,每處理一個請求加1,1秒後counter=QPS。 【QPS計算PV和機器的方式】

ngnix優化併發配置引數worker_processes

/etc/nginx/nginx.conf worker_processes預設為1,官方說1一般情況足夠了 也可以設定為cpu核心說,2或者4或者8,再高沒大意義 或者省事些,直接設定為auto,根據需求自動調整 參考

《連載 | 物聯網框架ServerSuperIO教程》- 17.整合Golden實時資料庫併發儲存測點資料。附:3.4 釋出與版本更新說明。

目       錄 17.支援實時資料庫,高併發儲存測點資料... 2 17.1        概述... 2 17.2        ServerSuperIO與實時資料庫對接... 4 17.2.1       繼承動態介面,

mysql悲觀鎖併發

1.高併發的時候有2種處理 1)後端進行執行緒安全處理,synchrnoized,還有其他不同粒度的鎖 2)在資料庫設定鎖,當你讀的時候,不允許其他人修改。可以用mysql的悲觀鎖 2.悲觀鎖 select * from 表名 for update for update很重

mysql主從複製資料量大 併發出現數據不一致

mysql5.7的並行複製就可以解決資料延遲的問題。 MySQL 5.7並行複製時代 眾所周知,MySQL的複製延遲是一直被詬病的問題之一,然而在Inside君之前的兩篇部落格中(1,2)中都已經提到了MySQL 5.7版本已經支援“真正”的並行複製功能,官方稱為

keepalived ,lvstomcat 可用併發高效能 應用架構的搭建

keepalived ,lvs,tomcat 高可用,高併發,高效能  應用架構的搭建 keepalived ,lvs 搭建在同一臺伺服器上,兩個tomcat 分別在一個tomcat上  四臺伺服器版本 :  centos 6.5 yum install ipvsa

高效能併發

1.負載均衡,加伺服器分流     1)nginx做負載伺服器,分發處理請求,ip_hash依據ip定位伺服器,防止session不共享處理。 2.程式碼儘量優化     1)包括常用寫法,for迴圈變數等等,網上很多資料。     2)消耗資源和佔用記憶體多的,都必須處理

Linux IO多路複用之epoll網路程式設計併發的使用例子 (含原始碼)

#include <unistd.h> #include <sys/types.h> /* basic system data types */ #include <sys/socket.h> /* basic socket definiti

Java架構師大資料架構師併發設計模式機器學習知識點分享

第一章:java精品課程目錄大全 1、億級流量電商詳情頁系統的大型高併發與高可用快取架構實戰 1課程介紹以及高併發高可用複雜系統中的快取架構有哪些東西?32分鐘 2基於大型電商網站中的商品詳情頁系

大資料量併發解決方案

解決大資料量高併發要考慮多方面的1.HTML靜態化2.靜態檔案伺服器分離  如圖片、css、js檔案等;3.資料庫叢集4.負載均衡5.快取6.讀寫分離Discuz!NT資料庫讀寫分離方案,我感覺這個還不錯http://www.cnblogs.com/daizhj/archiv

併發併發秒殺系統架構解密不是所有的秒殺都是秒殺!

前言 很多小夥伴反饋說,高併發專題學了那麼久,但是,在真正做專案時,仍然不知道如何下手處理高併發業務場景!甚至很多小夥伴仍然停留在只是簡單的提供介面(CRUD)階段,不知道學習的併發知識如何運用到實際專案中,就更別提如何構建高併發系統了! 究竟什麼樣的系統算是高併發系統?今天,我們就一起解密高併發業務場景