GIL(全局解释器锁)与互斥锁
生活随笔
收集整理的這篇文章主要介紹了
GIL(全局解释器锁)与互斥锁
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
針對(duì)Cpython所擁有的GIL鎖
作用:由于Cpython解釋器在運(yùn)行python文件時(shí),
Cpython進(jìn)程與其運(yùn)行文件所產(chǎn)生的主進(jìn)程是一個(gè)進(jìn)程(文件進(jìn)程相當(dāng)于Cpython的一個(gè)線程)
線程的特點(diǎn)是數(shù)據(jù)資源是共享的,而多個(gè)線程又都要共享Cpython的解釋權(quán)限,共享意味著競(jìng)爭(zhēng),有競(jìng)爭(zhēng)數(shù)據(jù)就不安全,
所以Cpython的GIL鎖(Cpython的一個(gè)線程)
就產(chǎn)生了,根本作用是,當(dāng)python文件中的線程想要執(zhí)行其代碼,必須獲得GIL權(quán)限,否則不能執(zhí)行,
所以cpu的多核優(yōu)勢(shì)也沒(méi)有了,除非多開(kāi)Cpython解釋器或多進(jìn)程,否則同時(shí)只能運(yùn)行一個(gè)線程
互斥鎖作用:
互斥鎖用于python文件運(yùn)行進(jìn)程(線程)時(shí),使數(shù)據(jù)修改等操作的競(jìng)爭(zhēng)變得有序化
程序運(yùn)行過(guò)程分析 1、暫定開(kāi)一個(gè)python進(jìn)程,內(nèi)有2個(gè)線程Thread-1,Thread-2,共享數(shù)據(jù)num 2、Thread-1要運(yùn)行其代碼改num,GIL獲得,Thread-1可以改,Thread-1獲得Lock 3、Thread-1代碼在改num前先執(zhí)行time.sleep(I/O啥的,就是沒(méi)運(yùn)行到改num) 4、這時(shí)Thread-2要運(yùn)行其代碼去修改num,由于Thread-1是阻塞狀態(tài),Thread-2獲得GIL 5、由于Thread-1有Lock,所以Thread-2無(wú)法更改num 6、這時(shí)Thread-1又搶到GIL,由于其保留Lock所以其可以繼續(xù)運(yùn)行代碼使其修改num 7、當(dāng)Thread-1執(zhí)行完釋放lock后,Thread-2在獲得GIL與Lock后才可對(duì)num進(jìn)行修改
作用:由于Cpython解釋器在運(yùn)行python文件時(shí),
Cpython進(jìn)程與其運(yùn)行文件所產(chǎn)生的主進(jìn)程是一個(gè)進(jìn)程(文件進(jìn)程相當(dāng)于Cpython的一個(gè)線程)
線程的特點(diǎn)是數(shù)據(jù)資源是共享的,而多個(gè)線程又都要共享Cpython的解釋權(quán)限,共享意味著競(jìng)爭(zhēng),有競(jìng)爭(zhēng)數(shù)據(jù)就不安全,
所以Cpython的GIL鎖(Cpython的一個(gè)線程)
就產(chǎn)生了,根本作用是,當(dāng)python文件中的線程想要執(zhí)行其代碼,必須獲得GIL權(quán)限,否則不能執(zhí)行,
所以cpu的多核優(yōu)勢(shì)也沒(méi)有了,除非多開(kāi)Cpython解釋器或多進(jìn)程,否則同時(shí)只能運(yùn)行一個(gè)線程
互斥鎖作用:
互斥鎖用于python文件運(yùn)行進(jìn)程(線程)時(shí),使數(shù)據(jù)修改等操作的競(jìng)爭(zhēng)變得有序化
程序運(yùn)行過(guò)程分析 1、暫定開(kāi)一個(gè)python進(jìn)程,內(nèi)有2個(gè)線程Thread-1,Thread-2,共享數(shù)據(jù)num 2、Thread-1要運(yùn)行其代碼改num,GIL獲得,Thread-1可以改,Thread-1獲得Lock 3、Thread-1代碼在改num前先執(zhí)行time.sleep(I/O啥的,就是沒(méi)運(yùn)行到改num) 4、這時(shí)Thread-2要運(yùn)行其代碼去修改num,由于Thread-1是阻塞狀態(tài),Thread-2獲得GIL 5、由于Thread-1有Lock,所以Thread-2無(wú)法更改num 6、這時(shí)Thread-1又搶到GIL,由于其保留Lock所以其可以繼續(xù)運(yùn)行代碼使其修改num 7、當(dāng)Thread-1執(zhí)行完釋放lock后,Thread-2在獲得GIL與Lock后才可對(duì)num進(jìn)行修改
轉(zhuǎn)載于:https://www.cnblogs.com/kevincaptain/p/10445120.html
總結(jié)
以上是生活随笔為你收集整理的GIL(全局解释器锁)与互斥锁的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Cmder命令行工具在Windows系统
- 下一篇: 《利用Python》进行数据分析:Num