【整理】Python之JIT、Django、Greenlet和Stackless

【JIT】 程序員

即時編譯(Just-in-time compilation),又稱爲動態編譯,是一種提升程序運行效率的方法。
一般程序有兩種編譯方式:靜態編譯與動態編譯(直譯)。在靜態編譯中,程序在執行前所有被翻譯爲機器碼,而動態直譯則是邊運行邊翻譯。
即時編譯器則混合了這兩者,一句一句編譯源代碼,可是會將翻譯過的代碼緩存起來以下降性能損耗。相對於靜態編譯代碼,即時編譯的代碼能夠處理延遲綁定並加強安全性。即時編譯器有兩種類型,一是字節碼翻譯,二是動態編譯翻譯。 數據庫

另外,通常來說編譯執行比解釋執行要快,可是編譯以後又不能跨平臺,那咱們就到目標平臺上去,先編譯再執行,這樣就比純解釋要快了。這種編譯是在「運行」的時候自動進行的,因此叫即時編譯(JIT)。 編程

Django 設計模式

Django是一個開放源代碼的Web應用框架,由Python寫成。採用了MVC(Model View Controller)的設計模式,M是指數據模型,V是指用戶界面,C則是控制器。
它最初是被開發來用於管理勞倫斯出版集團旗下的一些以新聞內容爲主的網站的。並於2005年7月在BSD許可證下發布。這套框架是以比利時的吉普賽爵士吉他手Django Reinhardt來命名的。

Django的主要目標是使得開發複雜的、數據庫驅動的網站變得簡單。Django注重組件的重用性和「可插拔性」,敏捷開發和DRY(Don't Repeat Yourself)法則。在Django中Python被廣泛使用,甚至包括配置文件和數據模型。 緩存

【Greenlet 安全

Greenlet是Stackless的副產品,其將微線程稱爲 「tasklet」 。tasklet運行在僞併發中,使用channel進行同步數據交換。一個」greenlet」,是一個更加原始的微線程的概念,可是沒有調度,或者叫作協程。這在你須要控制你的代碼時頗有用。你能夠本身構造微線程的 調度器;也可使用」greenlet」實現高級的控制流。例如能夠從新建立構造器;不一樣於Python的構造器,咱們的構造器能夠嵌套的調用函數,而被嵌套的函數也能夠yield一個值。Greenlet是做爲一個C擴展模塊給未修改的解釋器的。 併發

tasklet 框架

一個tasklet對象對應一個Python線程內的微任務。Tasklet的特色就是輕量級和可移植性,而且能夠做爲系統線程或進程的很是好的替代物。在程序啓動的時候,老是存在一個運行的主tasklet。 less

【Stackless】 函數

Stackless Python是Python程序語言的一個加強版本。其可以使程序員得到基於線程編程的好處,而免受與傳統線程模型相伴的性能和複雜度問題的困擾。Stackless爲Python引入了微線程的概念(microthread),其佔用系統資源少,屬於輕量級的東東。若是使用得當,你將得到以下益處:
a) 更好的程序結構 
b) 更據可讀性的代碼
c) 提升程序員的代碼生產力

在您想經過使用Stackless得到便利的時候,只有那麼一點點的來自stackless模塊的功能性信息須要你注意一下:

Microthreads: tasklet封裝了 容許以microthreads形式被啓動的函數。
Channels:channels可被用於兩個tasklet之間的雙向通訊。
Scheduling:內置的循環調度器。其能夠被用於合做式或者優先級式調度tasklets。

Serialisation:能夠經過pickling方式將tasklets序列化到硬盤以便後期恢復。

【Pickling】

Stackless的主要特性之一就是其能夠對tasklet進行pickle和unpickle。這意味着運行於tasklet內部的程序可以被持續不斷的存儲到文件或者字符串中。以後,其能夠基於以前中止的點從新恢復運行,而且該行爲不限於同一臺機器。

【Scheduler

在Stackless Python之中存在一個簡單的內置調度器(scheduler),其按順序循環遍歷調度器list以調度註冊其中的tasklet。當一個tasklet被建立後,其自動被添加到調度器list的尾部。然而,調度器須要經過人爲的主動調用才能開始工做。最簡單的運行調度器的方式是採用stackless模塊中提供的方法。該方法會移除主tasklet,而後輪流調度每個註冊的tasklet直到在調度器list爲空。

相關文章
相關標籤/搜索