GIL 只是保证同一个进程内只有一个线程在运行,但并不能这个线程的某一个需要完整操作不被中断。
大概是这个意思
假设A、B功能是对一个全局变量 m 进行+1。A在读取了m的值之后,被B拿去了GIL锁,然后B读取m的值,并+1,此时m是m+1.
然后A拿到了GIL锁,它刚刚已经读到了m的值,所以 B对m的+1操作 A是读不到的。A又对m进行+1操作,此时m是m+1
A B 都对m进行了+1 操作,按道理m应该是 m+2,但是m最终是 m+1
GIL 只是保证同一个进程内只有一个线程在运行,但并不能这个线程的某一个需要完整操作不被中断。
大概是这个意思
假设A、B功能是对一个全局变量 m 进行+1。A在读取了m的值之后,被B拿去了GIL锁,然后B读取m的值,并+1,此时m是m+1.
然后A拿到了GIL锁,它刚刚已经读到了m的值,所以 B对m的+1操作 A是读不到的。A又对m进行+1操作,此时m是m+1
A B 都对m进行了+1 操作,按道理m应该是 m+2,但是m最终是 m+1
上一篇:一个加速github的简单方法
举报文章
请选择举报类型
补充说明
0/200
上传截图
格式支持JPEG/PNG/JPG,图片不超过1.9M