多執行緒的基本概念

2021-10-02 02:08:45 字數 1802 閱讀 1557

同步和非同步通常用來形容一次方法的呼叫。同步方法呼叫一旦開始,呼叫者必須等到方法代用返回後,才能繼續後續的行為。

非同步方法呼叫更像乙個訊息傳遞,一旦開始,方法呼叫就會即可放回,呼叫者就可以繼續後續的操作。

而非同步方法通常會在另外乙個執行緒中真是的執行,整個過程不會阻礙呼叫者的工作。

併發:多個任務序列併發的,一會執行任務a,一會執行任務b。

並行:多個任務真是的同時執行。

臨界區用來表示一種公共資源或者說是共享資料,可以被多個執行緒使用。但是每一次,只能又乙個執行緒使用它,一旦臨界區被占用,其他執行緒要想使用這個資源就必須等待。

阻塞:乙個執行緒占用了臨界資源,那麼其他所有需要這個資源的執行緒就必須在這個臨界區中進行等待,等待會導致執行緒掛起。

非阻塞:沒有乙個執行緒可以妨礙其他執行緒執行,所有的執行緒都會嘗試不斷前向執行。

活鎖: 執行緒的智力不夠,而且秉承謙讓的原則,主動將資源釋放給他人使用,就會出現資源不斷在兩個執行緒中跳動,而且沒有乙個執行緒可以拿到所有的資源而正常執行。

飢餓:乙個或者多個執行緒因為種種原因無法獲得所需要的資源導致一直無法執行,比如執行緒的優先順序可能太低,而高優先順序的執行緒不斷搶占它需要的資源,導致優先順序低的執行緒無法工作。

死鎖:死鎖是指兩個或兩個以上的執行緒在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。

乙個執行緒是阻塞的,那麼其他執行緒在釋放資源之前,當前執行緒無法繼續執行。

非公平鎖會導致飢餓,如果鎖是公平的,滿足先來後到,那麼飢餓就不會產生。

無障礙是一種最弱的非阻塞排程。兩個執行緒如果是無障礙的執行,那麼他們不會因為臨界區的問題導致一方被掛起。如果大家一起修改共享資料,檢測到之後,會對自己所做的修改進行回滾。

無鎖的並行都是無障礙的。在無鎖的的情況下,所有的執行緒都能嘗試對臨界區進行訪問,但不同的是,無鎖的併發保證必然有乙個執行緒能夠在有限步驟內完成操作離開臨界區。

要求所有的執行緒必須在有限的步驟內完成,這樣就不會引飢餓問題。

一種點醒的無等待結構就是rcu(read-copy-update)。它的基本思想是,對資料的讀可以不加控制,因此所有的度執行緒都是無等待的。在寫資料的時候,先取得原始資料的副本,接著只修改副本資料,修改完成後,在合適的時機回寫資料。

amdahl定律:

加速比定比: 加速比= 優化前系統耗時 / 優化後系統耗時

結論:使用多核cpu對系統進行優化,優化的效果取決於cpu的數量以及系統中的序列化程式的比重。

cpu數量越多,序列的比重越低,則優化的效果越好。

gustafson:

《加速比》s(n) = n - f(n-1)

n 處理器的個數, f (a/(a+b))序列的比例。

如果序列比例很小,並行比例很大,那麼加速比就是處理器的個數。

amdahl定律的推導:   

n表示處理器個數,t表示時間,t1表示優化前的耗時(也就是只有乙個處理器時的耗時)tn 表示使用n個處理器優化後的耗時, f是程式中只能序列執行的比例。

gustafson定律推導

多執行緒基本概念

什麼是程式 為了完成某項特定的任務,使用某種語言,編寫一組指令的集合 什麼是程序 是乙個正在進行的程式 什麼是執行緒 在乙個程序中,執行的一套功能流程,稱為執行緒 在乙個程序中,執行的多套功能流程,稱為多執行緒 多執行緒程式的優點 1 降低資源消耗。通過重複利用已建立的執行緒降低執行緒建立和銷毀造成...

多執行緒 基本概念

多執行緒和高併發是身為開發人員高階中一直是繞不開的話題,為此專門學習了下,做下總結,作為自己的備忘錄。1.什麼是執行緒 執行緒是作業系統中能夠進行運算排程的最小單位,是程序中的實際運作單位。執行緒本身有乙個供程式執行時的堆疊,同類的多個 執行緒共享一塊記憶體空間。乙個執行緒的生存週期 新建狀態 就緒...

多執行緒基本概念

執行緒同步的真實意思和字面意思恰好相反。執行緒同步的真實意思,其實是 排隊 幾個執行緒之間要排隊,乙個乙個對共享資源進行操作,而不是同時進行操作。因此,關於執行緒同步,需要牢牢記住的第一點是 執行緒同步就是執行緒排隊。同步就是排隊。執行緒同步的目的就是避免執行緒 同步 執行。這可真是個無聊的繞口令。...