跳至內容

Stackless Python

維基百科,自由的百科全書
Stackless Python
原作者Christian Tismer
開發者Anselm Kruis
首次發佈1998年,​26年前​(1998
當前版本v3.8.1-slp(2021年8月12日,​3年前​(2021-08-12
原始碼庫 編輯維基數據鏈接
程式語言C, Python
作業系統Linux, Windows
類型解釋器
許可協議Python軟件基金會許可證
網站github.com/stackless-dev/stackless/wiki 編輯維基數據

Stackless Python或稱簡稱Stackless,是一個Python程式語言解釋器,這麼稱呼的原因是它避免了依賴C調用棧為自己的堆疊。在實際中,Stackless Python使用了C堆疊,但是這個堆疊在函數調用之間是被清除的[1]。Stackless Python的最突出特徵是微線程英語Microthread,它避免了與作業系統線程有關的大量開銷。在Python特徵之外,Stackless還增加了協程、通信通道和任務序列化

設計

對於Stackless Python,一個運行的程序被分解成微線程,由語言解釋器自身而非作業系統內核管理,上下文切換任務調度純粹在解釋器內完成,因而可以被視作是一種形式的綠色線程。微線程管理在同一個CPU核心上一個程序的不同子任務的執行,Stackless Python不移除Python的全局解釋器鎖, 也不使用多線程或多進程。所以它只允許在一個共享CPU核心上的協作式多任務而非並行,最初不能獲得而現在有了某種形式的搶佔[2]

由於相當數量的原始碼變更,Stackless Python不能在現存的Python安裝上作為一個擴展來安裝。它自身是完整的Python發行。大多數的Stackless Python的特徵也在PyPy中實現了,它是自我寄宿英語Self-hosting (compilers)的Python解釋器和JIT編譯器[3]

使用

儘管整個Stackless Python是一個獨立發行,它的上下文切換功能已經成功的打包為叫做greenlet的CPython擴展[4]。它被用在很多庫,比如gevent[5],用來提供CPython的綠色線程解決方案。Python現在已經接受了對綠色線程的原生解決方案:async/await

Stackless Python廣泛的使用在大規模多玩家在線遊戲Eve Online英語Eve Online的實現和IronPort英語IronPort的郵件平台。

引用

  1. ^ 存档副本. [2020-09-30]. (原始內容存檔於2020-08-29). 
  2. ^ 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. 
  3. ^ Application-level Stackless features — PyPy documentation. pypy.readthedocs.org. [2020-09-30]. (原始內容存檔於2016-04-13). 
  4. ^ greenlet: Lightweight concurrent programming — greenlet 0.4.0 documentation. greenlet.readthedocs.org. [2020-09-30]. (原始內容存檔於2016-04-16). 
  5. ^ What is gevent? — gevent 1.3.0.dev0 documentation. www.gevent.org. [2020-12-09]. (原始內容存檔於2020-09-16). 

參閱

外部連結