浅析Python虚拟机执行框架

转载 2015年07月07日 20:55:54

浅析Python虚拟机执行框架

2010-02-24 10:39 佚名 CSDN 字号:T | T
一键收藏,随时查看,分享好友!

下面的文章大家即将看到Python虚拟机的整体执行框架,大家还可以看到Python虚拟机在执行过程中不断使用的执行环境。

AD:

在Python虚拟机中一个最核心的概念,在Python语言中,一切都是对象,也就是说一个整数就是一个对象,一个字符串也是一个对象,其实类型也是一种对象,整数类型是一个对象。

了解这两点对掌握第二部分的内容已经足够了。但是,虚拟机和执行环境还仅仅是Python运行机理(或者说运行模型)的一部分,为了对Python整个的运行机理做一个全面的了解,我们还需要大致了解一下Python的运行时环境。

前面我们说了,PyFrameObject对应于可执行文件在执行时的栈帧,但是一个可执行文件要在操作系统中运行,只有栈帧是不够的。之前我们遗漏了两个对于可执行文件运行至关重要的概念:进程和线程。

在本节中,我们首先要对Python的运行模型(主要是线程模型)进行一个整体概念上的了解,虽然这部分内容我们会留到剖析Python的多线程实现时再详细考察。但是由于Python虚拟机在初始化时会创建一个主线程。

所以其运行时环境中存在一个主线程,而且本部分将剖析的Python的异常机制会利用到Python内部的线程模型,因此对Python线程模型有一个整体概念上的了解也是必须的。以Win32平台为例,我们知道,对于原生的Win32可执行文件,无论是由C/C++产生,还是由Delphi产生,都会在一个进程(Process)中运行。

进程并非是与机器指令序列相对应的活动对象,这个与可执行文件中机器指令序列对应的活动对象是由线程(Thread)这个概念来进行抽象的,而进程则是线程的活动环境。对于通常的单线程可执行文件,在执行时操作系统会创建一个进程,在进程中,又会有一个主线程;而对于多线程的可执行文件,在执行时会操作系统会创建一个进程和多个线程。

该多个线程能共享进程地址空间中的全局变量,这就自然而然地引出了线程同步的问题。CPU对任务的切换实际上是在线程之间切换,在切换任务时,CPU需要执行线程环境的保存工作,而在切换至新的线程之后,需要恢复该线程的线程环境。

这些关于程序运行的概念同样适用于PythonPython实现了对多线程的支持,而且Python中的一个线程就是操作系统上的一个原生线程。这里我们对多线程机制不过多深入,现在只需记住,Python在执行时,可能会有多个线程存在。

在前面我们看到了虚拟机的大致运行框架,实际上这个虚拟机就是Python中对CPU的抽象,可以看做是一个软CPU,Python中的所有线程都使用这个软CPU来完成计算工作。真实机器上的任务切换机制对应到Python中。

就是使不同的线程轮流使用虚拟机的机制。CPU切换任务时需要保存线程运行环境。对于Python来说,在切换线程之前,同样需要保存关于当前线程的信息。在Python中,这个关于线程状态信息的抽象是通过PyThreadState对象来实现的,一个线程将拥有一个PyThreadState对象。

所以从另一种意义来说,这个PyThreadState对象也可以看成是对线程本身的抽象。但实际上,这两者是有很大区别的,PyThreadState并非是对线程本身的模拟,因为Python中的线程仍然使用操作系统的原生线程。

PyThreadState仅仅是对线程状态的抽象,不过在本书的大部分章节中,为了叙述的方便,我们不过分严格地区分线程和线程状态本身。所以在以后我们有时会称PyThreadState为线程对象,有时会称之为线程状态对象。只有在剖析多线程机制时,我们会严格区分两者。对于下面将提到的PyInterpreterState对象,也有类似的考量。

刚才提到,在Win32下,线程是不能独立存活的,它需要存活在进程的环境中,而多个线程可以共享进程的一些资源。在Python中同样也是如此,考虑一下,如果Python程序中有两个线程,都会进行同样的一个动作——import sys,那么这个sys module究竟应该存在几份?

是全局共享的还是每个线程都有一个sys module?如果每个线程有自己独立module集合,那么Python对内存的消耗就会显得非常惊人。所以在Python中,这些module都是全局共享的,仿佛这些module都是进程中的共享资源一样,对于进程这个抽象概念,Python以PyInterpreterState对象来实现。

在Win32下,通常都会有多个进程,而Python实际上也可以有多个逻辑上的interpreter存在。在通常的情况下,Python中只有一个interpreter。这个interpreter中维护了一个或多个PyThreadState对象,与这些PyThreadState对象对应的线程轮流使用一个字节码执行引擎。看,是不是与真实机器上的程序执行模型非常相似?

谈到多线程,就不能不谈到线程同步。在Python虚拟机中,是通过一个全局解释器锁GIL(Global Interpreter Lock)来实现线程同步的,关于这部分内容,我们留到剖析Python多线程机制时再详细考察。

好了,现在讨论刚才提到的那两个关键对象:表示进程概念的PyInterpreterObject对象和表示线程概念的PyThreadState对象。

WinCVS与CVSNT简明使用手则(三)

 5.2    管理员进行管理演练:1.         登陆远程CVSNT:l         选择Admin=>Login菜单,默认设置,OK。l         弹出密码输入框,确认,OK。注意...
  • ycw
  • ycw
  • 2003-07-18 06:52:00
  • 11942

Python程序的执行原理

1. 过程概述 Python先把代码(.py文件)编译成字节码,交给字节码虚拟机,然后虚拟机一条一条执行字节码指令,从而完成程序的执行。 2. 字节码 字节码在Python虚拟机程序...
  • yongche_shi
  • yongche_shi
  • 2016-01-20 17:59:56
  • 271

Python虚拟机运行过程

Python先把代码(.py文件)编译成字节码,交给字节码虚拟机,然后虚拟机一条一条执行字节码指令,从而完成程序的执行。   python 虚拟机加载并运行字节码文件,运行的过程与操作系统加载运行可...
  • u012896140
  • u012896140
  • 2014-11-01 13:33:34
  • 1854

Python虚拟机实现

python并不将py文件编译为机器码来运行,而是由python虚拟机一条条地将py語句解释运行,这也是为什么被称为解释语言的原因之一。但python虚拟机并不直接执行py語句,它执行编译py語句后生...
  • celte
  • celte
  • 2014-09-19 23:36:15
  • 3225

Python程序的执行原理

Python程序的执行原理 目录Python2016年4月29日   1. 过程概述 Python先把代码(.py文件)编译成字节码,交给字节码虚拟机,然后虚拟机一条一条执行字节码...
  • sinat_29581293
  • sinat_29581293
  • 2016-04-30 21:35:09
  • 2813

Python解释执行原理

这里的解释执行是相对于编译执行而言的。我们都知道,使用C/C++之类的编译性语言编写的程序,是需要从源文件转换成计算机使用的机器语言,经过链接器链接之后形成了二进制的可执行文件。运行该程序的时候,就可...
  • clarkchenhot
  • clarkchenhot
  • 2016-08-02 10:56:52
  • 1785

Python程序的执行原理(-)

1. 过程概述 Python先把代码(.py文件)编译成字节码,交给字节码虚拟机,然后虚拟机一条一条执行字节码指令,从而完成程序的执行。 2. 字节码 字节码在Python虚拟机程序里对应的是P...
  • seeground
  • seeground
  • 2015-10-19 09:19:07
  • 293

浅析Python虚拟机执行框架

浅析Python虚拟机执行框架 2010-02-24 10:39 佚名 CSDN 字号:T | T 下面的文章大家即将看到Python虚拟机的整体执行框架,大家还可以看到P...
  • kk123a
  • kk123a
  • 2015-07-07 20:55:54
  • 373

Python程序的执行原理

http://itindex.net/detail/49069-python-%E7%A8%8B%E5%BA%8F-%E5%8E%9F%E7%90%86 Python程序的执行原理 标...
  • maijian
  • maijian
  • 2015-12-02 10:01:43
  • 214

谈谈 Python 程序的运行原理

谈谈 Python 程序的运行原理 这篇文章准确说是『Python 源码剖析』的读书笔记,整理完之后才发现很长,那就将就看吧。 1. 简单的例子 先从一个简单的例子说起,包含了两个文件 fo...
  • GarfieldEr007
  • GarfieldEr007
  • 2016-12-29 23:52:06
  • 674
收藏助手
不良信息举报
您举报文章:浅析Python虚拟机执行框架
举报原因:
原因补充:

(最多只允许输入30个字)