精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

JVM和Python解釋器的硬盤夜話

存儲 存儲設備
這個電腦的主人是個程序員,他相繼學習了C, Java ,Python, Go, 但是似乎停留在Hello World的水平。隨著hello.c, HelloWorld.java , Hello.py等文件被刪除,曾經熱鬧非凡的硬盤夜話也冷清了起來.....

 這個電腦的主人是個程序員,他相繼學習了C, Java ,Python, Go, 但是似乎停留在Hello World的水平。

隨著hello.c, HelloWorld.java , Hello.py等文件被刪除,曾經熱鬧非凡的硬盤夜話也冷清了起來.....

JVM先生

JVM先生發覺有點不太對勁,原來那些圍著自己獻殷勤的Java文件都不見了。

茫然四顧,也找不到一個可以執行的class文件, JVM先生覺得非常孤獨。

到隔壁目錄逛逛吧,說不定還有點新發現。

果然,隔壁目錄是正在發呆的Python解釋器,JVM先生曾經見主人用它執行過一次Hello.py。

當Python明白JVM先生的處境,不由得幸災樂禍起來: “看來你活不久了,傳說中可怕的卸載很快就會來找你了。”

“怎么可能?你才活不久! 可能你還不知道吧,Hello.py也去回收站享清福了,你現在和我一樣,都是孤家寡人!” JVM先生馬上反駁, “再說了,主人怎么可能卸載我? Java可是世界上使用者最多的語言。”

“你沒看到主人穿的T恤上寫的字嗎? 人生苦短,我用Python,這已經充分說明一切了。” Python解釋器補了一刀。

“得意什么? 你不就是個小小的解釋器嗎? 怎么能和我這性能卓越的虛擬機相比?”

“解釋器? 你居然當我是解釋器? 我明明是虛擬機好不好?別以為只有你有字節碼,我也有。” Python解釋器急忙澄清自己的身份。

“那你還不是解釋執行的?” JVM先生有點底氣不足。

“你是只知其一,不知其二,我看起來是直接解釋執行的,實際上我在背后把Python文件做了編譯,也形成了字節碼。”

說著,Python給出了一段自己的字節碼

  1. LOAD_FAST       0 (x) 
  2. LOAD_FAST       1 (y) 
  3. BINARY_ADD 
  4. LOAD_CONST      1 (10) 
  5. BINARY_MULTIPLY 
  6. RETURN_VALUE 

經驗老道的JVM先生一眼就看出來,這是基于棧的虛擬機!

你看它先把x, y 兩個變量從某個地方給取出來,壓入棧中, 然后彈出,做加法運算,把結果也壓入棧中。

接下來把常量10 壓入棧中,把上個結果(x+y) 和10 進行相乘, 最后返回。

其實這段代碼表達的就是 (x+y)*10 ! 和自己的JVM字節碼真是非常像!

(碼農翻身友情提示: 在《我是一個Java Class》中對基于棧的操作有漫畫描述)

雖然胸有激雷, 但JVM壓抑著努力做到面如平湖, 他淡淡地說:這不就是 (x+y)*10 嘛!

垃圾回收

“哈哈,我就知道老兄你一眼就能看透, 除此之外,我也有垃圾回收呢,主人只需要把對象創建起來,根本不用管什么時候把對象占據的空間和釋放掉。” Python再次拋出炸彈。

“垃圾回收?你是怎么做垃圾回收的? ” JVM先生一下子興奮起來,這可是他最厲害的領域之一,Python竟然敢班門弄斧!

“我主要使用簡單明了的引用計數法。” Python很得意。

所謂引用計數法就是給每個對象都增加一個“引用計數”的字段,每次有新的變量指向了對象A,A的引用計數就會加一,變量指向了別的對象,A的引用計數就是減一,當引用計數為0 ,就意味著對象A可以被回收了。

  1. a1 = ClassA()   # a1指向對象(簡稱對象A)的引用計數為 1 
  2. a2 = a1         # a1,a2 指向同一個對象,對象A引用計數為 2 
  3. a1 = ClassB()   # a1 指向新的對象, 對象A的引用計數變為1 

“看起來簡單,實際上一點都不簡單,每次遇到變量的賦值操作的時候,你都得把增加新對象的引用計數,還得減少老對象的引用計數,更要命的是循環引用問題, 你怎么解決?” JVM先生問道。

  1. a = ClassA()   # 對象A的引用計數為1 
  2. 2b = ClassB()   # 對象B的引用計數為1 
  3. 3a.t = b        # 對象B的引用計數為2 
  4. 4b.t = a        # 對象A的引用計數為2 
  5. 5del a          # 對象A還在被b所引用,引用計數還是為1,無法刪除 
  6. 6del b          # 對象B還在被a所引用,引用計數還是為1,無法刪除 

Python嘿嘿一笑:“我不是說了嗎,我主要是引用計數,我還有標記-清除,分代回收等算法作為輔助呢,從一個根集合開始,查找還被引用的,需要存活的對象...... 想來你是十分熟悉了。”

JVM先生當然很熟悉,想想自己的年輕代(里邊還要劃分成eden,survivor),年老代,Minor GC,Full GC,各種各樣的垃圾收集器Serial、PraNew、Parallel Scavenge,Serial Old、Parallel Old、CMS,各種各樣的參數調優,經常把新手搞得眼花繚亂,又興奮又迷茫。

沒想到這小子也有一套標記-清除,分代回收,看來在理論基礎上就難于壓倒他了。

“可是,網上討論Java 垃圾回收的文章鋪天蓋地,為什么很少人討論Python垃圾回收的參數,調優啊?是不是你做得不怎么樣啊?” JVM先生很疑惑。

“嘿嘿,那是因為我就不給Python程序員提供那些煩人的調優選項,你只要用就行了,難道你寫個Python腳本還要關注垃圾回收嗎? 沒必要! 人生苦短,我用Python,很有道理!”

GIL

“既然你用引用計數,怎么處理多個線程同時修改一個對象的引用計數問題? 如果引用計數被錯誤地修改, 很可能會導致一個對象一直不被回收,或者回收了一個不能被回收對象。 難道你在每個對象上都加了一把鎖? 只讓一個線程進入修改?” JVM 的思考頗有深度。

“嘿嘿,我沒有在每個對象上都加鎖,每次訪問都加鎖、解鎖,開銷太大! 并且還很容易引發死鎖。相反, 我只設置了一把鎖,Global Interpreter Lock ,簡稱GIL, 這把超級大鎖只允許一個線程獲得Python解釋器的控制權, 簡單來說,同一時刻,只有一個線程能運行!”

“同一時刻,只有一個線程能運行? ” JVM簡直不敢相信,這絕對顛覆了自己的世界觀和人生觀。

用戶寫了多線程的程序,如果CPU有多核,只有一個線程執行,怎么利用多核? 是為了實現“一核有難,多核圍觀”嗎?

線程切換的時候還得釋放GIL,競爭GIL,多線程可能跑得比單線程都慢了! 要多線程有什么用?

“其實也沒什么大不了的,老兄你也知道,這程序的瓶頸啊,它不在CPU, 而在于IO, 就是用戶的輸入,數據庫的查許,網絡的訪問, 線程等到有IO操作的時候,放棄GIL這個超級大鎖,讓別的線程去執行就是了。”


 

 

“那要是有個CPU密集型的線程在執行,根本沒有I/O, 一直霸占著GIL不放,那該怎么辦? ” JVM先生問道。

“放心吧,我肯定不能讓他霸占著CPU不放,我也得給別的線程一個機會運行。 具體的做法也很簡單,每當線程執行了100 ticks, 就需要釋放這個GIL。”

“tick ? 是時鐘周期嗎?”

“不是時鐘周期,是和我的字節碼相關的,一個tick映射到一條或多條字節碼。”

“當線程A執行了100個ticks以后,你就讓他放棄GIL,然后具體怎么處理?” JVM先生刨根問底。

“然后我就發個信號給操作系統老大嘍,讓他去調度那些因為沒有獲得GIL鎖而掛起的線程,大家去競爭這把鎖,當然線程A也會參與競爭,大家都站在同一個起跑線上,誰獲得了GIL, 誰就可以執行了。 ”


 

 

JVM覺得Python的這種作法實在是古怪,操作系統老大本來有一套自己的線程調度的策略,現在你為了讓線程釋放GIL, 又來搞個什么ticks, 把簡單的東西給變復雜了啊。

JVM先生很快想到另外一個問題: “線程A也會參與競爭?! 那要是在多核情況下,被分配到其他核的線程由于需要等待信號,喚醒以后才能競爭,線程A會不會經常搶先,‘打壓’別的線程,讓它們難以抬頭,難以運行? ”


 

 

Python不由得佩服JVM,它在這方面知識儲備真厲害,一下子就抓住了關鍵的小尾巴。他尷尬地笑了笑: “嗯,有這個可能。 ”

JVM從打心底鄙視這種GIL的全局鎖,太不講人性了。

“如果真想利用多核的特性,還想避開GIL, Python專家建議,還是用多進程吧! ” Python無奈地說道。

“多進程? 你要知道每個進程都是獨立的,數據共享起來比線程要麻煩得多! 程序不經過大改動是不行的。 你們怎么不把這個不講人性的GIL給去掉啊??”

“哎呀,不好改啊,歷史遺留問題了, 我們Python誕生于上世紀90年代初,比你Java 還早。 Python的設計目標就是易于使用,易于擴展,很多用C語言寫的擴展庫被開發出來,由于有GIL, 這些擴展庫都不必考慮線程安全問題,很容易被集成進來。”

看來存在就是合理的,C的擴展庫極大地豐富了Python的功能,促進了Python的發展和使用。

但是隨之多核的出現和流行,GIL慢慢地不合時宜了。關鍵是現在想去修改也很難了。

“那你們有沒有計劃,什么時候把GIL給干掉?”

“我覺得等到Python 3000也許有戲。” Python開玩笑,他還挺樂觀。

JVM先生突然想到一件事情:“我聽說你們Python語言在我的JVM上也有實現,叫做什么Jython,它有GIL的限制嗎?”

“Jython啊,他在底層都被編譯成你的Java字節碼了,在你的虛擬中運行,是沒有GIL的。”

“哼哼,還是我的平臺厲害吧!” JVM先生很得意。

尾聲

兩人正聊得熱火朝天, 突然看到主人回到電腦前,拿起鼠標,敲起鍵盤,不知道要做什么事情。

兩人非常緊張,惴惴不安地迎接最終的審判: 卸載。

可怕的卸載并沒有來臨, 相反,電腦里入住了兩個IDE, 一個是IntelliJ IDEA, 還有一個是PyCharm,兩人不由得歡呼起來: 看來主人并不打算拋棄我們,而是要用IDE做點大項目了!

【本文為51CTO專欄作者“劉欣”的原創稿件,轉載請通過作者微信公眾號coderising獲取授權】

 

戳這里,看該作者更多好文

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2017-09-27 15:13:22

Hello.javahello.c硬盤

2023-11-06 14:32:53

JVMJava

2017-11-28 10:09:08

語言JavaGo

2017-11-28 16:31:32

硬盤PythonJava

2023-09-27 08:46:44

Java 技術編程語言

2016-09-12 14:05:27

PythonPython解釋器Web

2019-07-24 13:42:34

Python編程語言代碼

2023-10-18 10:48:44

Python解釋器

2010-02-03 15:01:33

Python 解釋器

2010-02-01 17:11:45

Python 解釋器

2020-01-10 18:04:01

Python編程語言Windows

2014-04-18 09:31:04

PystonDropboxPython

2022-03-21 11:33:11

JVM垃圾回收器垃圾回收算法

2014-01-21 09:15:12

Python函數

2010-02-01 13:55:12

Python 解釋器

2014-01-21 09:42:32

Python代碼對象

2010-02-22 16:40:22

Python解釋器

2010-03-04 11:07:21

Python解釋器

2010-02-01 17:41:54

Python 解釋器

2022-01-05 08:58:08

Python解釋器編程語言
點贊
收藏

51CTO技術棧公眾號

欧美国产一级| 91网页在线观看| 亚洲黄页一区| 亚洲精品综合精品自拍| 深夜黄色小视频| 成码无人av片在线观看网站| 成人性生交大片免费看中文 | 亚洲天堂久久新| av久久网站| 亚洲成人你懂的| 亚洲人成网站在线播放2019| 男人天堂一区二区| 日本欧洲一区二区| 久久免费视频网站| 国产wwwwxxxx| 久久99精品国产自在现线| 在线视频观看一区| www精品久久| 午夜小视频在线| av电影在线观看一区| 国产精品一区av| 久久久久久久久久免费视频| 久久中文字幕av| 精品亚洲国产成av人片传媒| 欧美一级小视频| 亚洲少妇视频| 亚洲在线观看免费视频| 日韩一区国产在线观看| 少妇av一区二区| 精品一区二区三区久久久| 全球成人中文在线| 久久久久人妻一区精品色欧美| 日韩av久操| 亚洲欧美变态国产另类| 无码av免费精品一区二区三区| 祥仔av免费一区二区三区四区| 欧美日韩国产在线播放| 免费特级黄色片| av片在线观看| 最新成人av在线| 亚洲欧洲一区二区福利| 欧美日韩激情视频一区二区三区| 成a人片亚洲日本久久| 18成人在线| 一区二区三区免费观看视频| 老司机精品导航| 69久久夜色精品国产69| 精品无码m3u8在线观看| 欧美一区影院| 久久福利视频网| 欧美性x x x| 97视频热人人精品免费| 日韩在线观看网址| 美国黄色片视频| 99久久久国产精品美女| 久久精品福利视频| 97精品在线播放| 在线中文字幕亚洲| 久久成人综合视频| 久久精品99久久久久久| 激情av一区| 久久久之久亚州精品露出| 九九久久免费视频| 黄色国产精品| 91av在线网站| 黄色片视频免费| 亚洲欧美高清| 国产成人免费av| 中文字幕黄色av| 久久成人久久鬼色| 91免费高清视频| 亚洲爱情岛论坛永久| 国产91精品欧美| 国产自产精品| 久香视频在线观看| 中文字幕精品三区| 佐佐木明希av| av日韩中文| 91久久国产最好的精华液| 亚洲一区二区蜜桃| 精品欧美视频| 日韩成人小视频| 超碰人人干人人| 91成人超碰| 97国产精品免费视频| 久久国产视频精品| 久久99国产精品尤物| 99蜜桃在线观看免费视频网站| 视频一区二区免费| 国产精品视频第一区| 50度灰在线观看| 91精品产国品一二三产区| 欧美日韩亚洲综合一区二区三区| 美女日批在线观看| 亚洲精品国产动漫| 久久久国产精品免费| av大片免费在线观看| 蜜臀av在线播放一区二区三区| 97人人模人人爽人人喊38tv| 天堂网在线播放| 国产精品青草久久| 青青青免费在线| 久久电影天堂| 国产婷婷色综合av蜜臀av| 亚洲少妇xxx| 另类激情亚洲| 国产精品久久久久久久久久久久午夜片 | 九色porny丨首页在线| 精品日本高清在线播放| 日韩av自拍偷拍| 国产一区二区三区四区二区| 欧美另类极品videosbest最新版本 | 丝袜a∨在线一区二区三区不卡| 成人在线中文字幕| 免费在线一级视频| 亚洲国产日韩a在线播放性色| 一区二区三区 欧美| 国内精品免费| 欧美老妇交乱视频| 五月天中文字幕| 91丨porny丨中文| 国产午夜精品视频一区二区三区| 欧美色片在线观看| 日韩成人在线播放| 国产精久久久久久| 国产福利一区二区三区视频| 亚洲春色在线视频| 韩国美女久久| 日韩国产精品视频| 国产在线观看99| 国产麻豆精品95视频| 亚洲一区二区三区免费看| 亚洲人成午夜免电影费观看| 精品福利视频一区二区三区| 日本老熟俱乐部h0930| 麻豆精品一区二区三区| 日本一区二区三区精品视频| 手机av在线| 亚洲国产精品电影| 国产无码精品在线播放| 国产suv一区二区三区88区| 在线一区亚洲| 伊人国产精品| 久久久极品av| 99热这里只有精品在线观看| 专区另类欧美日韩| www.cao超碰| 97精品一区| 91亚洲精品久久久久久久久久久久| 日本精品在线| 欧美三级三级三级爽爽爽| 大吊一区二区三区| 久久99精品久久久久久国产越南| 亚洲日本精品| 韩国三级成人在线| 欧美另类在线播放| 高清国产mv在线观看| 亚洲国产视频网站| 免费a在线观看播放| 免费视频一区二区三区在线观看| 久久久久久欧美精品色一二三四| 欧美成人h版| 在线成人一区二区| 国产又粗又猛又爽又黄91| 亚洲四区在线观看| 久久久国产精品久久久| 在线日韩中文| 欧美一区二区三区精美影视 | 成人精品999| 日韩高清一级片| 永久域名在线精品| 日韩高清一区| 欧美综合一区第一页| 国产高清视频在线观看| 欧美日韩国产高清一区二区三区| 一区二区三区四区五区| 国产91精品久久久久久久网曝门| 女性女同性aⅴ免费观女性恋 | 日本三级中文字幕在线观看| 91久久精品无嫩草影院| 57pao精品| 亚洲精品承认| 亚洲成人中文字幕| 夜夜躁日日躁狠狠久久av| 亚洲三级视频在线观看| 日本道中文字幕| 日本少妇一区二区| 国产a级黄色大片| 伊人久久大香线蕉无限次| 成人免费视频a| 成年人黄色大片在线| 亚洲最大中文字幕| 亚洲免费一级片| 在线观看日韩一区| 欧美另类视频在线观看| 久久久精品免费免费| 日本人dh亚洲人ⅹxx| 久久不射网站| 国产成人三级视频| 亚洲日本三级| 亚洲一区二区少妇| gogo亚洲高清大胆美女人体| 欧美成人午夜影院| 国产精品一区二区婷婷| 精品久久久久香蕉网| 中文字幕在线观看你懂的| 亚洲高清免费视频| 久久福利免费视频| 久久先锋影音av鲁色资源| www.色.com| 青青草国产精品亚洲专区无| 性欧美大战久久久久久久| 偷拍欧美精品| 色狠狠久久av五月综合| 色爱av综合网| 国产伦精品一区二区三毛| 日本欧美在线| 国产精品劲爆视频| 男人av在线播放| 欧美日韩国产123| 欧美被日视频| 一区二区三区国产视频| 深夜福利在线看| 欧美精品一区二| 午夜精品无码一区二区三区 | 天堂在线观看视频| 四虎国产精品永久在线国在线 | 亚洲日本va午夜在线影院| 3d动漫精品啪啪一区二区下载 | 日韩少妇视频| www.欧美三级电影.com| 福利片在线观看| 国产午夜精品麻豆| 污视频在线免费| 欧美成人一区二区三区在线观看| 国产一区二区三区三州| 欧美私人免费视频| 婷婷激情五月综合| 日韩欧美成人区| 黄色片视频网站| 亚洲国产欧美在线人成| 久久久99精品| 亚洲激情图片qvod| 欧美日韩在线国产| 一个色综合av| 精品无码人妻一区二区三| 一区二区三区四区在线免费观看| 欧美做爰爽爽爽爽爽爽| 亚洲精品日日夜夜| 欧美日韩免费一区二区| 一区二区三区在线观看国产 | 激情亚洲成人| 成人在线观看你懂的| 99亚洲伊人久久精品影院红桃| 精品视频免费在线播放| 99精品视频免费| 欧美日韩在线中文| 久久久噜噜噜久久狠狠50岁| 亚洲色精品三区二区一区| 奇米888四色在线精品| 天堂av8在线| 国产精品123| 老司机午夜免费福利| 久久久久免费观看| 国产免费嫩草影院| 亚洲视频一区二区在线| 青青草原免费观看| 红桃av永久久久| 无码视频在线观看| 777奇米四色成人影色区| 精品国产无码AV| 亚洲级视频在线观看免费1级| 三级无遮挡在线观看| 在线视频精品一| 老司机午夜在线| 久久久久久久久久久网站| 伊人久久视频| 成人免费网站在线| 激情小说亚洲色图| 五月天亚洲综合| 欧美一区二区三区免费看| 激情伊人五月天| 日本在线不卡视频一二三区| 99热这里只有精品2| 91老师片黄在线观看| www中文在线| 亚洲成人精品一区| 国内av在线播放| 欧美mv日韩mv国产网站| 玖玖综合伊人| 欧美另类高清videos| 欧美人体一区二区三区| 亚洲va男人天堂| 网友自拍区视频精品| 四虎免费在线观看视频| 国产日韩1区| 欧美污在线观看| 久久久久久9999| 精品爆乳一区二区三区无码av| 色婷婷综合久久久中文一区二区 | 成人午夜在线视频| 亚洲不卡的av| 欧美日韩一二三四五区| 99久久婷婷国产一区二区三区| 日韩精品在线视频美女| caopon在线免费视频| 国产91亚洲精品| 久久视频社区| 亚洲精品免费播放| 国产精品久久久久久久久久久久冷| 久久久久99精品成人片我成大片 | 国产一区二区伦理| 久久精品女同亚洲女同13| 亚洲欧洲日韩av| 日韩在线播放中文字幕| 亚洲成av人片在线观看香蕉| 香蕉视频国产在线观看| 欧美亚洲国产日本| 亚洲精品影片| japanese在线视频| 日本亚洲一区二区| 成人影视免费观看| 午夜精品福利一区二区三区av | 亚洲激情第一页| 在线中文字幕视频观看| 国产精品视频导航| 狠狠做深爱婷婷综合一区| 动漫av网站免费观看| 福利电影一区二区三区| 欧美色图亚洲视频| 欧美放荡的少妇| 91女主播在线观看| 国产999精品久久久影片官网| 色婷婷精品视频| 91视频最新入口| 成人久久久精品乱码一区二区三区| 久久r这里只有精品| 欧美一级片免费看| h片在线观看网站| 成人综合国产精品| 99精品美女| 五月花丁香婷婷| 亚洲三级在线播放| 国产偷拍一区二区| 色综合天天狠天天透天天伊人| 国产精品亚洲综合在线观看| 日本一级淫片演员| 国产精品一区在线| 久久高清无码视频| 亚洲成av人影院在线观看| 国产伦理精品| 快播亚洲色图| 久久久精品网| 美女av免费看| 欧美一个色资源| 久久久123| 九九热久久66| 久久精品三级| 激情无码人妻又粗又大| 欧美精品v国产精品v日韩精品 | 欧美激情另类| 天天色天天综合网| 亚洲最大的成人av| 五月婷婷六月激情| 国产精品1234| 一精品久久久| 中国极品少妇xxxx| 91福利小视频| 免费黄色网址在线观看| 91在线看网站| 亚洲欧美成人| 青青草自拍偷拍| 日韩欧美美女一区二区三区| 国产99在线观看| 色999日韩自偷自拍美女| 久久激情五月激情| 久久久精品视频免费| 亚洲人成在线免费观看| 亚洲伊人伊成久久人综合网| 国产精品一线二线三线| 久久久精品国产免费观看同学| 亚洲天堂999| 91精品国产色综合久久不卡98| 精品国产91乱码一区二区三区四区 | 洋洋成人永久网站入口| 香蕉久久一区二区三区| 国产精品久久久久久久久影视| 欧美成人tv| 亚洲精品成人无码熟妇在线| 欧美精品久久一区二区三区| 波多野结衣久久| 亚洲 国产 日韩 综合一区| 国产精品资源网站| 成年人av网站| 久久久久国色av免费观看性色| 欧美精选视频在线观看| 少妇伦子伦精品无吗| 欧美亚洲图片小说| 国产污视频在线播放| 三年中国中文在线观看免费播放|