文档章节

python线程调度机制

charlesdong1989
 charlesdong1989
发布于 2013/06/11 09:28
字数 679
阅读 899
收藏 1

线程调度机制

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。

© 著作权归作者所有

charlesdong1989
粉丝 22
博文 155
码字总数 84903
作品 0
海淀
私信 提问
加载中

评论(0)

python 高性能编程之协程

用 greenlet 协程处理异步事件 自从 PyCon 2011 协程成为热点话题以来,我一直对此有着浓厚的兴趣。为了异步,我们曾使用多线程编程。然而线程在有着 GIL 的 Python 中带来的性能瓶颈和多线程...

passionfly
2015/05/07
781
0
Python, C-Python, Cython代码与GIL的交互

这篇笔记相对Python来说,有点底层,先来解释几个名词: C-Python: 或者CPython,指C实现的Python虚拟机的基础API。最通用的Python就是是基于C实现的,它的底层API称为C-Python API,所有Pyt...

鉴客
2012/02/23
4.9K
0
Python 协程:协程才是未来 / 被线程替代 / 推与拉

协程三篇之一(协程初接触) 协程虽然如此之好,看是很长时间以来,因为受到基于堆栈的子例程实现的限制,并没有多少语言在其实语言或库中支持协程,所以线程作为一个替代者(当然,线程也有...

岭南六少
2011/08/10
3K
1
Python的进程、线程、协程

从操作系统角度 操作系统处理任务,调度单位是进程和线程。 进程:表示一个程序的执行活动(打开程序、读写程序数据、关闭程序) 线程:执行某个程序时,该进程调度的最小执行单位(执行功能...

快乐水
2018/07/17
0
0
Python 异步网络爬虫 I

【阅读原文】 本文主要讨论下面几个问题: 什么是异步(Asynchronous)编程? 为什么要使用异步编程? 在 Python 中有哪些实现异步编程的方法? Python 3.5 如何使用 实现异步网络爬虫? 所谓...

蛙声一爿
2016/10/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Python什么情况下会生成pyc文件?

作为Python爱好者,需要了解.py脚本的基本运行机制及特性: 在很多工作上Python的运行流程基本上取决于用户,因此源码不需要编译成二进制代码(否则无法实现大部分贴近用户的特性),而直接从...

Python圈子
11分钟前
15
0
Python正则表达式,这一篇就够了!

之前我们讲解了 正则表达式语法与引擎 的起源、发展、流派、语法、引擎、优化等相关知识,今天我们主要来学习一下 正则表达式在 Python语言 中的应用! 大多数编程语言的正则表达式设计都师从...

猪哥66
13分钟前
15
0
linux chattr命令的使用

chattr命令用来改变文件属性。这项指令可改变存放在ext2文件系统上的文件或目录属性 , 用chattr命令防止系统中某个关键文件被修改 添加属性i:不得任意更动文件或目录。 chattr +i /home/ww...

imzchloe
13分钟前
19
0
基于三维GIS技术的符号化表达系统的设计及实现

随着三维GIS技术的发展,人们在其可视化能力方面要求不断提高,在部分应用中,人们不仅要求将场景中物体位置准确描述表达出来,同时还需要保证其逼真性和美观性在智慧城市阶段,三维GIS的构建...

ZTMAP
17分钟前
11
0
技术分享 | 排序(filesort)详细解析(8000 字长文)

作者:高鹏(网名八怪) 文章末尾有他著作的《深入理解 MySQL 主从原理 32 讲》,深入透彻理解 MySQL 主从,GTID 相关技术知识。 本文来源:转载自公众号-老叶茶馆 *爱可生开源社区出品,原创...

爱可生
19分钟前
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部