併發編程(一):先談硬件——從 count++ 到原子性、可見性與有序性
《併發編程(一):先談硬件——從 count++ 到原子性、可見性與有序性》這篇在博客園熱度很高,講的正是大家天天碰到的事。下面幫你把要點捋出來,結尾有能直接抄的結論。
目錄 1. 從馮諾依曼體系結構說起 2. count++ 最終會變成什麼? 3. 爲什麼需要 Cache? 4. 單核下的併發問題:爲什麼 count++ 會丟失更新? 5. 從單核走向多核:可見性問題 6. 多個內存操作之間的順序又怎麼辦? 6.1 Store Buffer 6.2 Out-of-Order Execution 7. 到這裏,我們實際上遇到了三個問題 8. 硬件如何回答這三個問題? 8.1 Atomicity:Atomic Instruction 8.2 Visibility:Cache Coherence 8.3 Ordering:Memory Ordering / Fence 9. 總結 這一篇繼續沿用 count ,只關注硬件層: CPU 和內存系統到底會帶來哪些併發問題,硬件又提供了什麼能力? 1. 從馮諾依曼體系結構說起 馮諾依曼提出將程序當作數據對待,把程序(指令)和數據用同樣的方式存儲。根據這個理論,計算機可以分成控制器、運算器、存儲器、輸入設備和輸出設備。 運算器和控制器組成 CPU,CPU 內部還有寄存器。
目錄 1. 從馮諾依曼體系結構說起 2. count++ 最終會變成什麼? 3. 爲什麼需要 Cache? 4. 單核下的併發問題:爲什麼 count++ 會丟失更新? 5. 從單核走向多核:可見性問題 6. 多個內存操作之間的順序又怎麼辦? 6.1 Store Buffer 6.2 Out-of-Order Execution 7. 到這裏,我們實際上遇到了三個問題 8. 硬件如何回答這三個問題? 8.1 Atomicity:Atomic Instruction 8.2 Visibility:Cache Coherence 8.3 Ordering:Memory Ordering / Fence 9. 總結 這一篇繼續沿用 count ,只關注硬件層: CPU 和內存系統到底會帶來哪些併發問題,硬件又提供了什麼能力? 1. 從馮諾依曼體系結構說起 馮諾依曼提出將程序當作數據對待,把程序(指令)和數據用同樣的方式存儲。根據這個理論,計算機可以分成控制器、運算器、存儲器、輸入設備和輸出設備。 運算器和控制器組成 CPU,CPU 內部還有寄存器。其中, Program Counter(PC,程序計數器)保存下一條指令的地址 ;Instruction Register(IR,指令寄存器)保存當前正在處理的指令; R1 這樣的通用寄存器用於保存數據和中間結果。
目錄 1. 從馮諾依曼體系結構說起 2. count++ 最終會變成什麼? 3. 爲什麼需要 Cache? 4. 單核下的併發問題:爲什麼 count++ 會丟失更新? 5. 從單核走向多核:可見性問題 6. 多個內存操作之間的順序又怎麼辦? 6.1 Store Buffer 6.2 Out-of-Order Execution 7. 到這裏,我們實際上遇到了三個問題 8. 硬件如何回答這三個問題? 8.1 Atomicity:Atomic Instruction 8.2 Visibility:Cache Coherence 8.3 Ordering:Memory Ordering / Fence 9. 總結 這一篇繼續沿用 count ,只關注硬件層: CPU 和內存系統到底會帶來哪些併發問題,硬件又提供了什麼能力? 1. 從馮諾依曼體系結構說起 馮諾依曼提出將程序當作數據對待,把程序(指令)和數據用同樣的方式存儲。根據這個理論,計算機可以分成控制器、運算器、存儲器、輸入設備和輸出設備。 運算器和控制器組成 CPU,CPU 內部還有寄存器。其中, Program Counter(PC,程序計數器)保存下一條指令的地址 ;Instruction Register(IR,指令寄存器)保存當前正在處理的指令; R1 這樣的通用寄存器用於保存數據和中間結果。 [代碼示例略] CPU 執行程序的過程可以簡化爲: [代碼示例略] 也就是說,CPU 會不斷重複 Fetch → Decode → Execute ,依次執行程序中的機器指令。
目錄 1. 從馮諾依曼體系結構說起 2. count++ 最終會變成什麼? 3. 爲什麼需要 Cache? 4. 單核下的併發問題:爲什麼 count++ 會丟失更新? 5. 從單核走向多核:可見性問題 6. 多個內存操作之間的順序又怎麼辦? 6.1 Store Buffer 6.2 Out-of-Order Execution 7. 到這裏,我們實際上遇到了三個問題 8. 硬件如何回答這三個問題? 8.1 Atomicity:Atomic Instruction 8.2 Visibility:Cache Coherence 8.3 Ordering:Memory Ordering / Fence 9. 總結 這一篇繼續沿用 count ,只關注硬件層: CPU 和內存系統到底會帶來哪些併發問題,硬件又提供了什麼能力? 1. 從馮諾依曼體系結構說起 馮諾依曼提出將程序當作數據對待,把程序(指令)和數據用同樣的方式存儲。根據這個理論,計算機可以分成控制器、運算器、存儲器、輸入設備和輸出設備。 運算器和控制器組成 CPU,CPU 內部還有寄存器。其中, Program Counter(PC,程序計數器)保存下一條指令的地址 ;Instruction Register(IR,指令寄存器)保存當前正在處理的指令; R1 這樣的通用寄存器用於保存數據和中間結果。 [代碼示例略] CPU 執行程序的過程可以簡化爲: [代碼示例略] 也就是說,CPU 會不斷重複 Fetch → Decode → Execute ,依次執行程序中的機器指令。程序裏的 count++ 最終也要轉換成這樣的指令。
目錄 1. 從馮諾依曼體系結構說起 2. count++ 最終會變成什麼? 3. 爲什麼需要 Cache? 4. 單核下的併發問題:爲什麼 count++ 會丟失更新? 5. 從單核走向多核:可見性問題 6. 多個內存操作之間的順序又怎麼辦? 6.1 Store Buffer 6.2 Out-of-Order Execution 7. 到這裏,我們實際上遇到了三個問題 8. 硬件如何回答這三個問題? 8.1 Atomicity:Atomic Instruction 8.2 Visibility:Cache Coherence 8.3 Ordering:Memory Ordering / Fence 9. 總結 這一篇繼續沿用 count ,只關注硬件層: CPU 和內存系統到底會帶來哪些併發問題,硬件又提供了什麼能力? 1. 從馮諾依曼體系結構說起 馮諾依曼提出將程序當作數據對待,把程序(指令)和數據用同樣的方式存儲。根據這個理論,計算機可以分成控制器、運算器、存儲器、輸入設備和輸出設備。 運算器和控制器組成 CPU,CPU 內部還有寄存器。其中, Program Counter(PC,程序計數器)保存下一條指令的地址 ;Instruction Register(IR,指令寄存器)保存當前正在處理的指令; R1 這樣的通用寄存器用於保存數據和中間結果。 [代碼示例略] CPU 執行程序的過程可以簡化爲: [代碼示例略] 也就是說,CPU 會不斷重複 Fetch → Decode → Execute ,依次執行程序中的機器指令。程序裏的 count++ 最終也要轉換成這樣的指令。 2. count++ 最終會變成什麼?
讀完別停:把最觸動你的一條記下來,這周就用上。能落地的閱讀纔算數,歡迎回來聊聊你的實踐結果。 來源|博客園《併發編程(一):先談硬件——從 count++ 到原子性、可見性與有序性》,https://www.cnblogs.com/ThinkerQAQ/p/22969810.html
評論(0)
暫無評論,來搶第一條。