1. 程式人生 > >python 中的互赤鎖是否有必要?

python 中的互赤鎖是否有必要?

主動 主循環 寫入 不能 只有一個 。。 情況下 進行 補充

  首先我們在進行對比之前,我們要知道什麽是全局解釋器鎖,和什麽是互斥鎖,他們分別是用來做什麽的才能解決這個問題。

  

  首先介紹全局解釋解釋器鎖GIL,Python代碼的執行由Python 虛擬機(也叫解釋器主循環,CPython版本)來控制,Python 在設計之初就考慮到要在解釋器的主循環中,同時只有一個線程在執行,即在任意時刻,只有一個線程在解釋器中運行。對Python 虛擬機的訪問由全局解釋器鎖(GIL)來控制,正是這個鎖能保證同一時刻只有一個線程在運行。從宏觀微觀上來說,GIL是宏觀的操作。比如在一個4核的環境下,只有一個核是運行著線程,而其他三個核是空的。GIL是線程鎖,針對線程,而不是進程。然而這些規則是Cpython給的,像Jpython就沒有這個機制。

  其中,在多線程的情況下,python虛擬機按以下方式執行:

  1. 設置GIL
  2. 切換到一個線程去運行
  3. 運行:
  a. 指定數量的字節碼指令,或者    b. 線程主動讓出控制(可以調用time.sleep(0))
  4. 把線程設置為睡眠狀態
  5. 解鎖GIL
  6. 再次重復以上所有步驟   接下來是互斥鎖:個線程要共享數據時,先將其鎖定,此時資源的狀態為“鎖定”,其他線程不能更改;直到該線程釋放資源,將資源的狀態變成“非鎖定”,其他的線程才能再次鎖定該資源。互斥鎖保證了每次只有一個線程進入寫入操作,從而保證了多線程情況下數據的正確性。互斥鎖體現的就是一個同步的機制,即該線程釋放資源就是一個條件,條件完成,才能執行下一步操作。是微觀的操作。   好像,這樣就能說明兩者的區別了。。。後續補充--

python 中的互赤鎖是否有必要?