GIL 全域性直譯器鎖 理解

2022-07-12 11:39:09 字數 631 閱讀 8478

gil 鎖,全域性直譯器鎖,作用就是,限制多執行緒同時執行,保證同一時間內只有乙個執行緒在執行。

​ 執行緒非獨立的,所以同一程序裡執行緒是資料共享,當各個執行緒訪問資料資源時會出現競狀態,即資料可能會同時被多個執行緒占用,造成資料混亂,這就是執行緒的不安全。

​ 所以引進了互斥(chi)鎖,確保某段關鍵**、共享資料只能由乙個執行緒從頭到尾完整地執行,但這個有個致命問題,死鎖。

​ 死鎖:若干子執行緒在系統資源競爭時,都在等待對方對某部分資源解除占用狀態,結果哦誰也不願意先解鎖,互相等著,程式無法執行下去,這就是死鎖。

知識擴充套件

gil 由於歷史原因,龜叔在python中引進了gil,保證每乙個程序任何時候只有乙個執行緒來執行,獲取鎖並獲取資源,避免了多執行緒併發執行,保證了執行緒的安全。

現在對gil 有兩種聲音,一種時接受gil, 一種是不接受gil,從python中移除

一接收gil,自從python出現後,後面太多的模組都使用了python的gil來編寫,一旦去掉gil ,這些模組都要重寫,代價太大

二去掉gil,去掉gil 才能發揮多核處理器的優勢,可以加快多執行緒程式的執行,實現真正的多執行緒

解決方案

1、換直譯器 gil 只有cpython有 可以換 jpython

2、換多程序 少用執行緒

GIL 全域性直譯器鎖

1 描述python中gil的概念,以及它對python多執行緒的影響?編寫乙個多執行緒抓取網頁的程式,並闡明多執行緒抓取程式是否可比單執行緒效能有提公升,並解釋原因。答 gil global interpreter lock,即全域性直譯器鎖 1 python語言和gil沒有半毛錢關係。僅僅是由於...

GIL全域性直譯器鎖

gil 啥?他是如何產生的?gil產生的背景 在cpython解釋內部執行多個執行緒的時候,每個執行緒都需要直譯器內部申請相應的全域性資源,由於c語言本身比較底層造成cpython在管理所有全域性資源的時候並不能應對所有執行緒同時的資源請求,因此為了防止資源競爭而發生錯誤,對所有執行緒申請全域性資源...

全域性直譯器鎖GIL

我們使用高併發,一次是建立1萬個執行緒去修改乙個數並列印結果看現象 from threading import thread import osdef func args global n n args print n,os.getpid n 100t list for i in range 100...