Stackless Python
原作者 | Christian Tismer |
---|---|
開發者 | Anselm Kruis |
首次發布 | 1998年 |
當前版本 | v3.8.1-slp(2021年8月12日 | )
源代碼庫 | |
編程語言 | C, Python |
操作系統 | Linux, Windows |
類型 | 解釋器 |
許可協議 | Python軟件基金會許可證 |
網站 | github |
Stackless Python或稱簡稱Stackless,是一個Python編程語言解釋器,這麼稱呼的原因是它避免了依賴C調用棧為自己的堆棧。在實際中,Stackless Python使用了C堆棧,但是這個堆棧在函數調用之間是被清除的[1]。Stackless Python的最突出特徵是微線程,它避免了與操作系統線程有關的大量開銷。在Python特徵之外,Stackless還增加了協程、通信通道和任務序列化。
設計
[編輯]對於Stackless Python,一個運行的程序被分解成微線程,由語言解釋器自身而非操作系統內核管理,上下文切換和任務調度純粹在解釋器內完成,因而可以被視作是一種形式的綠色線程。微線程管理在同一個CPU核心上一個程序的不同子任務的執行,Stackless Python不移除Python的全局解釋器鎖, 也不使用多線程或多進程。所以它只允許在一個共享CPU核心上的協作式多任務而非並行,最初不能獲得而現在有了某種形式的搶占[2]。
由於相當數量的源代碼變更,Stackless Python不能在現存的Python安裝上作為一個擴展或庫來安裝。它自身是完整的Python發行。大多數的Stackless Python的特徵也在PyPy中實現了,它是自我寄宿的Python解釋器和JIT編譯器[3]。
使用
[編輯]儘管整個Stackless Python是一個獨立發行,它的上下文切換功能已經成功的打包為叫做greenlet的CPython擴展[4]。它被用在很多庫,比如gevent[5],用來提供CPython的綠色線程解決方案。Python現在已經接受了對綠色線程的原生解決方案:async/await。
Stackless Python廣泛的使用在大規模多玩家在線遊戲Eve Online的實現和IronPort的郵件平台。
引用
[編輯]- ^ 存档副本. [2020-09-30]. (原始內容存檔於2020-08-29).
- ^ About Stackless. [26 August 2016]. (原始內容存檔於2020-06-23).
a round robin scheduler is built in. It can be used to schedule tasklets either cooperatively or preemptively.
- ^ Application-level Stackless features — PyPy documentation. pypy.readthedocs.org. [2020-09-30]. (原始內容存檔於2016-04-13).
- ^ greenlet: Lightweight concurrent programming — greenlet 0.4.0 documentation. greenlet.readthedocs.org. [2020-09-30]. (原始內容存檔於2016-04-16).
- ^ What is gevent? — gevent 1.3.0.dev0 documentation. www.gevent.org. [2020-12-09]. (原始內容存檔於2020-09-16).
參閱
[編輯]外部連結
[編輯]- Stackless Python Documentation for: 3.7-slp(頁面存檔備份,存於網際網路檔案館), 3.6-slp(頁面存檔備份,存於網際網路檔案館), 3.5-slp(頁面存檔備份,存於網際網路檔案館), 3.4-slp(頁面存檔備份,存於網際網路檔案館), 2.7-slp(頁面存檔備份,存於網際網路檔案館)
- GitHub上的stackless頁面
- Multithreaded Game Scripting with Stackless Python(頁面存檔備份,存於網際網路檔案館) by Harry Kalogirou
- Continuations and Stackless Python by Christian Tismer