python GIL全局解釋器鎖

這個鎖不是語言本身的問題  是解釋器的問題 

爲了保證線程安全所以採用線程全局鎖  也因爲歷史原因一直沒有去掉

每個線程在執行的時候都要獲取一個GIL,GIL保證在程序執行的時候只有一個線程可以工作 當這個線程GIL鎖釋放的時候才能切換到其他線程執行

python中的多線程是一個僞線程

在遇到網絡IO阻塞的時候  會暫時釋放GIL鎖以此來完成多任務的併發或者並行 

 python3中使用定時器   python2中使用計數的方法當達到臨界值的時候他就會重新獲取GIL鎖

爲什麼GIL全局解釋器鎖已經說了確保當前只有一個線程可以運行 那爲什麼還要使用互斥鎖 
答:多線程子線程共享全局變量當線程獲得GIL鎖的時候可能他的代碼邏輯還沒有執行完的話GIL鎖被釋放又被切換到另外一個子線程中執行 這樣可能會引起計算錯誤線程之間互相搶奪資源 使用了互斥鎖之後他可以保證同一時刻只有一個程序可以操作全局變量 
這樣就能保證計算或者結果不會出差錯 這就是互斥鎖存在的意義 當然使用了互斥鎖之後會大大的降低運行效率 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章