前言 經常在網上看到一些博客,介紹高併發。由於我們在實際開發過程遇到高併發的場景非常少,一直覺得很高大上, 那我們通過CPU,操作系統,和JDK 等方面揭開高併發的''神秘面紗''。 1: 什麼時候發生併發 在電腦中,CPU執行程式指令的。那我們看下下麵這個圖 思考: 當兩個程式在不同的C ...
前言
經常在網上看到一些博客,介紹高併發。由於我們在實際開發過程遇到高併發的場景非常少,一直覺得很高大上, 那我們通過CPU,操作系統,和JDK 等方面揭開高併發的''神秘面紗''。
1: 什麼時候發生併發
在電腦中,CPU執行程式指令的。那我們看下下麵這個圖
思考: 當兩個程式在不同的CPU種執行的時候,會產生併發行為嗎?
答案: 不會產生,因為兩個CPU執行的不同程式指令,不存在數據共用,不會產生併發。
如果是下麵這張圖呢?
當兩個CPU 同時執行一段指令的時候,這個時候CPU之間需要進行數據讀寫,這個時候就會產生併發問題。
Tip 那我們開始思考一個問題,在我們的應用系統中併發會產生在哪些位置?
2: 併發發生的位置
上圖全面描述了整個指令會發生併發的地方,並且描述瞭解決併發的方案。由於CPU 和 其他OS 都已經解決了原子性問題,其實我們只需要關心使用線程過程中併發的問題。
3: 解決併發的方案
3.1 線程級別
Tip : 這裡只是簡單的描述一下併發的解決方案,後面的文章還會介紹JUC的整體結構以及詳細的併發設計,請關註後面的文章
3.2 CPU級別
Tip : 這裡只是簡單的描述一下CPU級別的併發解決方案 後面會有一篇文章主要介紹CPU級別是怎麼解決併發的。
本文來自博客園,作者:笨笨的二黃子,轉載請註明原文鏈接:https://www.cnblogs.com/zwhdd/p/17158103.html