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進行修改
作用:由于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進行修改
轉載于:https://www.cnblogs.com/kevincaptain/p/10445120.html
總結
以上是生活随笔為你收集整理的GIL(全局解释器锁)与互斥锁的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Cmder命令行工具在Windows系统
- 下一篇: 《利用Python》进行数据分析:Num