解決思路:利用同步來進行解決
執行緒執行函式1時,對其加鎖,使得函式2的請求加鎖的請求被阻礙,只有函式1完全執行完畢,釋放鎖後,執行緒2才能得到鎖,繼續執行下去。
2.非同步
同步呼叫就是你喊朋友去吃飯,朋友在忙,你就一直等,等你朋友忙完,你們再一起去吃飯
非同步呼叫就是你喊朋友去吃飯,朋友在忙說忙完找你,你就去做別的事了。
3.互斥鎖
當多個執行緒幾乎同時修改乙個共享資料時,需要進行同步控制,執行緒同步能夠保證多個執行緒安全的訪問競爭資源,最簡單的機制就是使用互斥鎖
當乙個執行緒呼叫鎖的acquire()方法獲得鎖時,鎖就進入locked狀態,每次只有乙個執行緒可以得到鎖,,如果此時另乙個執行緒試圖獲得鎖,那麼該執行緒就會變為blocked狀態,直到擁有鎖的執行緒release()
好處:確保了某段關鍵**只能由乙個執行緒從頭到尾完整的執行
壞處:阻止了多執行緒的併發執行,效率下降。由於可能存在多個鎖,因此可能會造成死鎖。
4.死鎖
如果兩個執行緒分別占有一部分資源,並同時等待對方發資源,就會造成死鎖現象。
5.佇列
佇列優先順序
佇列**先出
6.threadlocal
在多執行緒環境下,每個執行緒都有自己的資料,乙個執行緒使用自己的區域性變數比使用全域性變數要好,因為區域性變數只有自己能看見,不會影響其他執行緒,而全域性變數的修改必須加鎖
7.協程
協程是比執行緒更小的執行單元,協程自帶上下文,只要在合適的時機,我們可以吧乙個協程切換到另乙個協程。通俗的理解:在乙個執行緒中某個函式,可以在任何地方儲存當前函式的一些臨時變數等資訊,然後在切換到另乙個函式中執行,注意,這不是通過函式呼叫做到的,切換的次數和時機都是由開發者決定的。
這個過程看起來和執行緒差不多,但其實不然,執行緒切換從系統層面遠不止儲存和恢復cpu上下文那麼簡單,執行緒切換非常耗效能,但協程的切換只是單純操作cpu上下文。
87 python高階 閉包
def test1 print in test1 func 呼叫函式 test1 引用函式 ret test1 print id ret print id test1 通過引用呼叫函式 ret 執行結果 in test1 func 140212571149040 140212571149040 in...
python程序執行緒優缺點 Python學習筆記
這是學習廖雪峰老師python教程的學習筆記 1 概覽 我們介紹了多程序和多執行緒,這是實現多工最常用的兩種方式。現在,我們來討論一下這兩種方式的優缺點 要實現多工,通常我們會設計master worker模式,master負責分配任務,worker負責執行任務,因此,多工環境下,通常是乙個mast...
小朋友學Python(14) 日期和時間
import time now time.time print now執行結果 1512884891.53說明 這裡得到的時間是時間戳 timestamp 是從1970年1月1日0時0分開始計算的,單位是秒。時間戳單位最適於做日期運算。但是1970年之前的日期就無法以此表示了。太遙遠的日期也不行,u...