1. 程式人生 > >關於python的執行緒和GIL全域性鎖的一些見解

關於python的執行緒和GIL全域性鎖的一些見解

GIL全域性鎖是:Python語言和GIL沒有半毛錢關係。僅僅是由於歷史原因在Cpython虛擬機器(直譯器),難以移除GIL.每個執行緒在執行的過程都需要先獲取GIL,保證同一時刻只有一個執行緒可以執行程式碼。作用就是保證同一時刻只有一個執行緒可以執行程式碼,造成了我們使用多執行緒的時候無法實現並行.

 

關於多執行緒:

在python中,雖然其中有threading模組,也可以進行呼叫,但創造出來的多執行緒並不是真正意義上的多執行緒.

因為就算使用了多執行緒模式,也不能實現併發的效果,這就是因為有一個全域性GIL鎖,這個鎖的意義就是同一時間內,保證真正執行的執行緒只有一個,只有進行IO操作阻塞的時候可能引起阻塞的system call之前可以暫時釋放GIL,但在執行完畢後,必須重新獲取GIL鎖.

在使用多執行緒的時候,多執行緒爬取比單執行緒效能有提升,因為遇到IO阻塞會自動釋放GIL鎖,類似於協程.

結論:

        1. 在 處理像科學計算 這類需要持續使用cpu的任務的時候 單執行緒會比多執行緒快
        2. 在 處理像IO操作等可能引起阻塞的這類任務的時候 多執行緒會比單執行緒

 

GIL鎖的解決方法:

    1:更換直譯器 比如使用jpython(java實現的python直譯器),python預設的直譯器是Cpython虛擬機器.
    2:使用多程序完成多工的處理