python线程调度机制

线程调度机制

python通过GIL来互斥不同线程对解释器的使用,也就是说同一时间只有一个线程访问python提供的API,在多核cpu中可以实现多线程的独立运行,但是由于GIL,使多核退化成单核。
python的线程和操作系统的线程调度机制一样,要解决两个问题:

  1. 在何时挂起当前线程,选择下一个线程?
  2. 在众多的处于等待的线程当中,选择激活哪一个线程?

在python中这两个问题实在两个不同的层次上解决的;对于何时挂起线程,是由python自身决定的,考虑一下操作系统是如何进行进程调度的,当进程执行一段时间之后,发生时钟中断,操作系统响应时钟中断,并在这是进行进程度调度。同样python中也是通过软件模拟了这种始终中断,来激活线程调度。

<!-- lang: python -->
>>> import sys
>>>sys.getcheckinterval()
100

python是一条一条顺序执行的,python内部维护着一个数值,这个数值是python的内部时钟,默认值是100,也就是说python在执行完100条语句之后,开始进行线程调度。也使用这个数值检查是否有异步事件发生。需要处理。
python控制着什么时候进行线程调度,当一个线程获得访问python解释器的所必需的GIL并进入解释器后,当这个线程执行了100条语句后,python解释器将强制挂起当前线程,开始切换到下一个处于等待的线程。
对于第二个问题,究竟哪个线程会被执行,在这个问题上python是不会插手的,而是交给底层的操作系统来解决,python借用底层的操作系统的线程调度机制来决定下一个进入python解释器的线程究竟是谁。所以python的线程实际就是操作系统所支持的原生线程,python的多线程机制建立在操作系统的原生线程机制之上,不同的操作系统有不同的实现。 然而最终,在不同的操作系统的原声线程之上,python提供了一套统一的抽象机制,给python的使用者一个多线程的工具箱,就是python的Thread和Threading。


在python虚拟机启动时,多线程机制并没有激活,他只支持单线程,一旦用户调用 thread.start_new_thread,明确指示要创建多线程了,python会自动建立多线程机制和GIL。

转载于:https://my.oschina.net/u/240562/blog/137040

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值