成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

淺析Python虛擬機執行框架

開發 后端
下面的文章大家即將看到Python虛擬機的整體執行框架,大家還可以看到Python虛擬機在執行過程中不斷使用的執行環境。

Python虛擬機中一個最核心的概念,在Python語言中,一切都是對象,也就是說一個整數就是一個對象,一個字符串也是一個對象,其實類型也是一種對象,整數類型是一個對象。

了解這兩點對掌握第二部分的內容已經足夠了。但是,虛擬機和執行環境還僅僅是Python運行機理(或者說運行模型)的一部分,為了對Python整個的運行機理做一個全面的了解,我們還需要大致了解一下Python的運行時環境。

前面我們說了,PyFrameObject對應于可執行文件在執行時的棧幀,但是一個可執行文件要在操作系統中運行,只有棧幀是不夠的。之前我們遺漏了兩個對于可執行文件運行至關重要的概念:進程和線程。

在本節中,我們首先要對Python的運行模型(主要是線程模型)進行一個整體概念上的了解,雖然這部分內容我們會留到剖析Python的多線程實現時再詳細考察。但是由于Python虛擬機在初始化時會創建一個主線程。

所以其運行時環境中存在一個主線程,而且本部分將剖析的Python的異常機制會利用到Python內部的線程模型,因此對Python線程模型有一個整體概念上的了解也是必須的。以Win32平臺為例,我們知道,對于原生的Win32可執行文件,無論是由C/C++產生,還是由Delphi產生,都會在一個進程(Process)中運行。

進程并非是與機器指令序列相對應的活動對象,這個與可執行文件中機器指令序列對應的活動對象是由線程(Thread)這個概念來進行抽象的,而進程則是線程的活動環境。對于通常的單線程可執行文件,在執行時操作系統會創建一個進程,在進程中,又會有一個主線程;而對于多線程的可執行文件,在執行時會操作系統會創建一個進程和多個線程。

該多個線程能共享進程地址空間中的全局變量,這就自然而然地引出了線程同步的問題。CPU對任務的切換實際上是在線程之間切換,在切換任務時,CPU需要執行線程環境的保存工作,而在切換至新的線程之后,需要恢復該線程的線程環境。

這些關于程序運行的概念同樣適用于Python,Python實現了對多線程的支持,而且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對象對應的線程輪流使用一個字節碼執行引擎??矗遣皇桥c真實機器上的程序執行模型非常相似?

談到多線程,就不能不談到線程同步。在Python虛擬機中,是通過一個全局解釋器鎖GIL(Global Interpreter Lock)來實現線程同步的,關于這部分內容,我們留到剖析Python多線程機制時再詳細考察。

好了,現在討論剛才提到的那兩個關鍵對象:表示進程概念的PyInterpreterObject對象和表示線程概念的PyThreadState對象。

【編輯推薦】

  1. 有關Python系統文件進行介紹指導
  2. 如何正確的使用Python函數
  3. 對Python 構建工具進行詳細介紹分析
  4. PythonAndroid淺析Python優勢所在
  5. 如何使用Python模塊解析配置文件?
責任編輯:chenqingxiang 來源: CSDN
相關推薦

2009-06-19 15:38:43

Java虛擬機

2018-04-04 15:05:17

虛擬機字節碼引擎

2012-05-18 10:22:23

2013-07-17 09:32:58

2010-07-26 09:02:38

2024-09-30 16:08:43

Python虛擬機棧幀

2019-03-19 15:30:42

程序員JVM虛擬機

2009-12-22 16:05:05

Linux操作系統

2010-02-26 15:28:15

Python虛擬機

2023-01-26 00:06:05

JAVA虛擬機優化

2017-11-14 16:43:13

Java虛擬機線程

2009-06-18 13:51:07

Java虛擬機

2014-02-21 11:20:34

KVMXen虛擬機

2010-12-23 14:05:12

虛擬機

2023-09-03 17:05:20

虛擬機

2012-04-10 10:29:29

2020-01-17 10:52:37

無服務器容器技術

2010-02-24 10:49:11

Python運行環境

2010-02-01 08:39:50

Linux虛擬機

2009-09-07 22:01:52

虛擬機安裝Linux系
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 免费三级网站 | 久草热8精品视频在线观看 午夜伦4480yy私人影院 | 日本欧美黄色片 | 久久久久久中文字幕 | 欧美中文字幕一区二区三区亚洲 | 亚洲一区二区av | 99re视频这里只有精品 | 亚洲一区欧美一区 | www.久久.com| 日韩视频在线播放 | 久久精品小短片 | 久久久久国产 | 日韩国产一区二区三区 | 久久精品久久综合 | 中文字幕亚洲一区二区三区 | 伊人天堂网 | 欧美激情精品久久久久久免费 | 午夜欧美一区二区三区在线播放 | av手机在线 | 伦理片97 | 午夜精品久久久久99蜜 | 一级毛片视频在线观看 | 日韩图区 | 韩日精品在线观看 | 成人无遮挡毛片免费看 | 亚洲精品视频免费看 | 欧美精品中文字幕久久二区 | 韩日视频在线观看 | 亚洲国产二区 | 91亚洲国产成人久久精品网站 | 一区二区在线不卡 | 国产www.| 免费播放一级片 | 日韩av在线一区二区 | 欧美精品首页 | 国产在线观看一区二区三区 | 免费看黄色片 | 一区二区三区四区不卡视频 | 久99久视频| 午夜av影院| 91精品国产综合久久婷婷香蕉 |