python线程调度机制

线程调度机制

python经过GIL来互斥不一样线程对解释器的使用,也就是说同一时间只有一个线程访问python提供的API,在多核cpu中能够实现多线程的独立运行,可是因为GIL,使多核退化成单核。
python的线程和操做系统的线程调度机制同样,要解决两个问题: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。工具

相关文章
相关标签/搜索