深入理解 GIL:以及线程锁Lock()与RLock()

深入理解 GIL:如何写出高性能及线程安全的 Python 代码

伯乐在线:http://python.jobbole.com/87743/  

翻译自:https://opensource.com/article/17/4/grok-gil

线程锁:http://python.jobbole.com/82723/

python threading模块有两类锁:互斥锁(threading.Lock )和可重用锁(threading.RLock)

互斥锁:lock.acquire() lock.acquire() 造成迭代死锁。

“可重入锁”:threading.RLock。RLock内部维护着一个Lock和一个counter变量,counter记录了acquire的次数,从而使得资源可以被多次require。直到一个线程所有的acquire都被release,其他的线程才能获得资源。

可重用锁:rlock.acquire() rlock.acquire() 不会造成迭代死锁。

 

加锁的结果会造成阻塞,而且会造成开锁大。会根据顺序由并发的多线程按顺序输出,如果后面的线程执行过快,需要等待前面的进程结束后其才能结束

貌似有点像队列的概念了 ,不过在加锁的很多场景下确实可以通过队列去解决。

你可能感兴趣的:(Python)