查了很多资料,这些资料基本直说到GIL会让是字节码只让一个线程执行,但是为什么要这么做的原因,都感觉没说的很彻底。所以想请高人解惑!!
怪我咯2017-04-17 16:19:33
在python之父的一些談話中,可以看出一些些貓膩。
有些聽眾問到global interpreter lock(GIL),想要更深入了解這個問題,以及這個問題是如何解決的。 Van Rossum笑著反問:「你有多少時間?」他簡短的講述了GIL產生的歷史。在Python誕生後,多核心計算機出現了。當執行緒運行在不同的核心時,兩個或更多的處理器要更新同一個物件便產生了競爭機制,特別是在Python垃圾回收處理機制中。
一個合理的解決方案就是給每個物件上鎖,這樣可以保護資料不被多路存取破壞。但結果導致當沒有鎖的競爭時,上鎖和解鎖操作代價高昂。一些實驗表明,不需要上鎖的單執行緒程式效能會因此降低2倍。這意味著只有在使用三個或多個執行緒或核心的程式會從中獲益。
因此,GIL 誕生了(儘管這個名字在它被添加到解釋器後很久才出現)。它是一個立刻有效鎖定所有物件的單一鎖,這樣所有物件存取將排序進行。目前的問題是,10年或15年以後,多核心處理器無所不在,人們想要不必進行多重處理就可利用它們(例如,使用獨立的進程而不是線程通訊)
他說,如果你當今想要設計一種新語言,要讓它沒有易變的對象,或是有限的易變性。然而,聽眾中傳來「這就不是 Python 了」。 Van Rossum 贊成的說:「你說了我要說的話」。 GIL 周圍有許多開發者不斷的努力,包括 PyPy 軟體事務記憶體(STM),以及 PyParallel。其他開發者也撞破了腦袋在想解決辦法。如果有人知道有什麼辦法能夠移除 GIL 且讓語言保持 Python 特性,Van 和其他人將很樂意聽到。