python线程什么时候切换_python多线程

Python的多线程由于GIL的存在,同一时刻只有一条线程执行。线程切换发生在线程睡眠、等待网络I/O、执行1000字节码指令或15ms后,以及执行C/C++代码时。协同和抢占式多任务处理确保了并发执行,提高了程序效率。
摘要由CSDN通过智能技术生成

python 代码的执行由python虚拟机来控制,虚拟机访问由GIL控制,保证其同一时刻只有一条线程运行。

虽然python能运行多线程,但是因为GIL所以同一时刻只有一条线程在python解释器运行。

多线程下python虚拟机按以下方式执行:

1. 设置GIL

2. 切换到一条线程去运行

3. 运行:

a. 执行python2虚拟机运行1000字节指令    或者    执行python3虚拟机运行时间15ms字节

b. 线程主动让出控制(遭遇sleep或者IO操作也将触发)

4. 把线程设置为睡眠状态(等待状态)

5. 释放GIL

6. 再次重复上述操作

线程何时切换?

==========================================================

(1)一个线程无论何时开始睡眠或等待网络 I/O,其他线程总有机会获取 GIL 执行 Python 代码。这是协同式多任务处理。CPython 也还有抢占式多任务处理。如果一个线程不间断地在 Python 2 中运行 1000 字节码指令,或者不间断地在 Python 3 运行15 毫秒,那么它便会放弃 GIL,而其他线程可以运行。把这想象成有多个线程但只有一个 CPU 时的时间片可用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值