GIL(全局解釋器鎖)與互斥鎖


在GIL(全局解釋器鎖)與互斥鎖的前提下,程序的運行過程分析

針對Cpython所擁有的GIL鎖
作用:由於Cpython解釋器在運行python文件時,
Cpython進程與其運行文件所產生的主進程是一個進程(文件進程相當於Cpython的一個線程)
線程的特點是數據資源是共享的,而多個線程又都要共享Cpython的解釋權限,共享意味着競爭,有競爭數據就不安全,
所以Cpython的GIL鎖(Cpython的一個線程)
就產生了,根本作用是,當python文件中的線程想要執行其代碼,必須獲得GIL權限,否則不能執行,
所以cpu的多核優勢也沒有了,除非多開Cpython解釋器或多進程,否則同時只能運行一個線程

互斥鎖作用:
互斥鎖用於python文件運行進程(線程)時,使數據修改等操作的競爭變得有序化


程序運行過程分析
1、暫定開一個python進程,內有2個線程Thread-1,Thread-2,共享數據num
2、Thread-1要運行其代碼改num,GIL獲得,Thread-1可以改,Thread-1獲得Lock
3、Thread-1代碼在改num前先執行time.sleep(I/O啥的,就是沒運行到改num)
4、這時Thread-2要運行其代碼去修改num,由於Thread-1是阻塞狀態,Thread-2獲得GIL
5、由於Thread-1有Lock,所以Thread-2無法更改num
6、這時Thread-1又搶到GIL,由於其保留Lock所以其可以繼續運行代碼使其修改num
7、當Thread-1執行完釋放lock后,Thread-2在獲得GIL與Lock后才可對num進行修改


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM