python进阶教程13:多线程、GIL、锁和线程隔离
文章目录
-
-
- python多线程基础概念
-
- 1. GIL锁
- 2. 线程ID
- 3. 启动多线程
- 4. 继承threading.Thread
- 5. 传入参数
- 6. 后台线程
- 7. join
- python threading.local 线程隔离
-
- 1. 输出结果是多少
- 2. 线程隔离
- 为什么python多线程同时写一个数据会不安全
- python多线程---线程锁
-
- 1. 资源共享
- 2. 线程锁
- python多线程Lock和RLock的区别
-
- 1. 两种锁的不同
-
- 1.1 定义
- 1.2 死锁
-
- 1.3 可重入锁
- 2. 怎么会多次请求锁呢?
- python多线程线程同步---Condition
-
- 1. 生产者-消费者模型
- 2. 线程同步
- 3. 条件变量--Condition
-
- 3.1 wait
- 3.2 notify
- 4.1 生产者都调用了wait方法
- 4.2 notify
- 4.3 wait 和 release
-
python多线程基础概念
python的多线程由threading模块提供多线程的实现,python多线程的基础概念,包括GIL锁,如何线程的ID,如何启动线程,如何传入参数,如何创建后台线程, 如何使用join连接子线程并等待子线程全部结束。
1. GIL锁
python的多线程,并不是真正的多线程,因为有Global Interpreter Lock这个bug一般的全局锁存在,这使得同一时刻,只能有一个线程在执行。
需要注意的是,GIL锁并不是python语言的特性,它是实现CPython时引入的概念。一门语言的代码,可以由多种编译器来编译,比如C++的代码,你可以用GCC 来编译,也可以用Visual C++,同理,一段python代码也可以在不同的执行环境来执行,比如CPython,PyPy,JPython,这其中,JPython就没有GIL锁,由于CPython是默认的执行环境,有全局锁的存在,所以,python很难有效的利用多核
