1. 程式人生 > >併發程式設計與執行緒安全

併發程式設計與執行緒安全

併發基本概念

  

併發:同時擁有兩個或者多個執行緒,如果程式在單核處理器上執行多個執行緒將交替地換入或者換出記憶體,這些執行緒是同時“存在”的,每個執行緒都處於執行過程中的某個狀態,如果執行在多核處理器上,此時,程式中的每個執行緒都將分配到一個處理器核心上,因此可以同時執行。

考慮多執行緒併發時,大部分是多執行緒操作相同的資源,保證執行緒安全,合理使用資源。

 

1、如何理解執行緒安全呢?

    程式碼中所謂的程序有多個執行緒同時執行,而這些執行緒,可能同時運行同一段程式碼,如果每次執行結果與單執行緒執行結果是一樣的,而其他變數的值,也是和預期是一樣的,我們就認為這是執行緒安全的,簡單來說,就是併發環境下,得到結果和我們預期正確結果是一致得。

 2、如何理解執行緒不安全呢?

    執行緒不安全,不提供資料訪問保護,有可能出現執行緒先後更改資料,造成所得到得資料是髒資料,也可能是計算時出現得錯誤。

3、併發的優勢與風險

  

優勢:

    一:速度,系統同時處理多個請求,那麼等待的時間就會變短,響應更快,複雜的操作可以分成多個程序同時執行,這就加快處理速度。

    二:設計,程式設計在某些情況下更簡單,也可以有更多的選擇。

    三:資源利用,CPU能夠在等待IO的時候做一些其他的事情。

缺點:

    一:安全性,多個執行緒共享資料時,可能會產生於期望不相符的結果。

    二:活躍性,某個操作無法繼續進行下去時,就會發生活躍性問題。比如死鎖,飢餓等問題。

    三:效能,執行緒過多時會使得,CPU頻繁切換,排程時間增多,同步機制,消耗過多記憶體。 

總結:

CPU多級快取,快取一致性,亂序執行優化。

Java記憶體模型,JMM規定,抽象結構,同步八種操作及規則。

Java併發的優勢與風險。