欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

python虛擬機運行的原理是什么

python虛擬機運行的原理是什么?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

十多年的尋烏網(wǎng)站建設經(jīng)驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。成都全網(wǎng)營銷的優(yōu)勢是能夠根據(jù)用戶設備顯示端的尺寸不同,自動調整尋烏建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)建站從事“尋烏網(wǎng)站設計”,“尋烏網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。

 一、過程概述

1、python先把代碼(.py文件)編譯成字節(jié)碼,交給字節(jié)碼虛擬機,然后虛擬機會從編譯得到的PyCodeObject對象中一條一條執(zhí)行字節(jié)碼指令,并在當前的上下文環(huán)境中執(zhí)行這條字節(jié)碼指令,從而完成程序的執(zhí)行。Python虛擬機實際上是在模擬操作中執(zhí)行文件的過程。PyCodeObject對象中包含了字節(jié)碼指令以及程序的所有靜態(tài)信息,但沒有包含程序運行時的動態(tài)信息——執(zhí)行環(huán)境(PyFrameObject)

2、字節(jié)碼在python虛擬機程序里對應的是PyCodeObject對象;.pyc文件是字節(jié)碼在磁盤上的表現(xiàn)形式。

3、從整體上看:OS中執(zhí)行程序離不開兩個概念:進程和線程。python中模擬了這兩個概念,模擬進程和線程的分別是PyInterpreterState和PyTreadState。即:每個PyThreadState都對應著一個幀棧,python虛擬機在多個線程上切換。當python虛擬機開始執(zhí)行時,它會先進行一些初始化操作,最后進入PyEval_EvalFramEx函數(shù),它的作用是不斷讀取編譯好的字節(jié)碼,并一條一條執(zhí)行,類似CPU執(zhí)行指令的過程。函數(shù)內部主要是一個switch結構,根據(jù)字節(jié)碼的不同執(zhí)行不同的代碼。

 二、關于.pyc文件

PyCodeObject對象的創(chuàng)建時機是模塊加載的時候,即import。

1、執(zhí)行 python test.py 會對test.py進行編譯成字節(jié)碼并解釋執(zhí)行,但不會生成test.pyc
2、如果test.py中加載了其他模塊,如import urllib2,那么python會對urllib2.py進行編譯成字節(jié)碼,生成urllib2.pyc,然后對字節(jié)碼解釋執(zhí)行。
3、如果想生成test.pyc,我們可以使用python內置模塊py_compile來編譯。
也可以執(zhí)行命令 python -m test.py 這樣,就生成了test.pyc
4、加載模塊時,如果同時存在.py和.pyc,python會使用.pyc運行,如果.pyc的編譯時間早于.py的時間,則重新編譯.py,并更新.pyc文件。

三、關于PyCodeObject

Python代碼的編譯結果就是PyCodeObject對象,如下:

typedef struct {
    PyObject_HEAD
    int co_argcount;        /* 位置參數(shù)個數(shù) */
    int co_nlocals;         /* 局部變量個數(shù) */
    int co_stacksize;       /* 棧大小 */
    int co_flags;   
    PyObject *co_code;      /* 字節(jié)碼指令序列 */
    PyObject *co_consts;    /* 所有常量集合 */
    PyObject *co_names;     /* 所有符號名稱集合 */
    PyObject *co_varnames;  /* 局部變量名稱集合 */
    PyObject *co_freevars;  /* 閉包用的變量名集合 */
    PyObject *co_cellvars;  /* 內部嵌套函數(shù)引用的變量名集合 */
    /* The rest doesn’t count for hash/cmp */
    PyObject *co_filename;  /* 代碼所在文件名 */
    PyObject *co_name;      /* 模塊名|函數(shù)名|類名 */
    int co_firstlineno;     /* 代碼塊在文件中的起始行號 */
    PyObject *co_lnotab;    /* 字節(jié)碼指令和行號的對應關系 */
    void *co_zombieframe;   /* for optimization only (see frameobject.c) */
} PyCodeObject;

 四、執(zhí)行字節(jié)碼

Python虛擬機的原理就是模擬可執(zhí)行程序再X86機器上的運行

假如test.py用C語言來實現(xiàn),會是下面這個樣子:

const char *s = “hello”;
 
void func() {
    printf(“%s\n”, s);
}
 
int main() {
    func();
    return 0;
}

Python虛擬機的原理就是模擬上述行為。當發(fā)生函數(shù)調用時,創(chuàng)建新的棧幀,對應Python的實現(xiàn)就是PyFrameObject對象。

PyFrameObject對象創(chuàng)建程序運行時的動態(tài)信息,即執(zhí)行環(huán)境,相關源碼大致如下:

typedef struct _frame{  
    PyObject_VAR_HEAD //"運行時棧"的大小是不確定的  
    struct _frame *f_back; //執(zhí)行環(huán)境鏈上的前一個frame,很多個PyFrameObject連接起來形成執(zhí)行環(huán)境鏈表  
    PyCodeObject *f_code; //PyCodeObject 對象,這個frame就是這個PyCodeObject對象的上下文環(huán)境  
    PyObject *f_builtins; //builtin名字空間  
    PyObject *f_globals;  //global名字空間  
    PyObject *f_locals;   //local名字空間  
    PyObject **f_valuestack; //"運行時棧"的棧底位置  
    PyObject **f_stacktop;   //"運行時棧"的棧頂位置  
    //...  
    int f_lasti;  //上一條字節(jié)碼指令在f_code中的偏移位置  
    int f_lineno; //當前字節(jié)碼對應的源代碼行  
    //...  
      
    //動態(tài)內存,維護(局部變量+cell對象集合+free對象集合+運行時棧)所需要的空間  
    PyObject *f_localsplus[1];    
} PyFrameObject;

每一個 PyFrameObject對象都維護了一個 PyCodeObject對象,這表明每一個 PyFrameObject中的動態(tài)內存空間對象都和源代碼中的一段Code相對應。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。

當前文章:python虛擬機運行的原理是什么
當前URL:http://aaarwkj.com/article2/gdedic.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站建站公司、電子商務、網(wǎng)站收錄、全網(wǎng)營銷推廣、云服務器

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化
久久精品人妻少妇一区二区| 九九热视频这里是精品| av第一福利大全导航| 色婷婷一区二区三区影片| 日韩精品在线不卡一区| 哪里可以看黄色片日韩| 免费搜索国产男女视频| 国产二区三区在线播放| 精品视频一区二区三区在线观看| 欧美成人精品在线观看| 国产成人av网站在线观看| 国产精品久久中文字幕网| 热99精品视频在线观看| 日韩精品有码在线视频免费观看| 日韩电影在线观看二区| 99精品国产高清一区二区三区| 亚洲欧美韩国日本成人综合| 欧美日韩亚洲精品综合网| 手机看片黄色福利视频91| 欧美日韩一区二区三区在线| 亚洲精品成av人在线观看| 国产91美女黄色在线观看| 亚洲成人日韩国产欧美| 国产极品美女视频福利| 久视频这里只有精品99| 亚洲永久免费黄色av| 日本av一区二区在线| 中文字幕你懂的在线观看| 国产毛片精品一区内射| 白天躁晚上躁天天躁在线| 国产一区二区三区本色| 国内精品久久大型新型| 丁香婷婷激情五月天综合| 看看永久成人免费视频| 中文字幕伦理一区二区三区| 丁香色婷婷国产精品视频| 日韩欧美国产麻豆91在线精品| 麻豆映画传媒在线播放| 久久av少妇亚洲精品| 久久成人日韩电影午夜| 一区二区中文字幕日本韩国|