python直譯器和GIL鎖

2022-09-11 13:15:16 字數 798 閱讀 8077

python寫的.py檔案想要執行必須通過python直譯器轉化為cpu可以識別的**(0101...)。python存在多種直譯器,由不同的語言開發,常見的直譯器如下:

cpython

ipython

ipython是在cpython基礎上增加了互動功能,jupyter notebook就是使用了ipython。

pypy

pypy是另乙個python直譯器,他的目標是執行速度,他和cpython有所不同。

jpython

jpython是執行在j**a平台上的直譯器,可以直接把python**編譯成j**a位元組碼執行。

iropython

ironpython和jython類似,只不過ironpython是執行在微軟.net平台上的python直譯器,可以直接把python**編譯成.net的位元組碼。

gil:每個執行緒在執行的過程都要先獲取gil,保證同一時刻只有乙個執行緒可以執行**。

這是c語言python直譯器中的乙個缺點,這是乙個歷史遺留問題,很難改變。

使用cpython直譯器,python無法發揮多核cpu的效率。

計算密集型程式

比如計算1到1000000的立方和,這個時候用程序。

io密集型程式

檔案讀寫、網路收發等。存在等待、延時,可以用執行緒和協程。

1. 換乙個python直譯器

2. 使用其他語言來寫python執行緒的內容(比如c語言),然後使用python呼叫。當然也可以用其他語言,體現了python膠水語言的特性。

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...