Stackless Python

出自Local Chinese Wikipedia
imported>Yumeto2026年3月2日 (一) 15:27的修訂 (使用DisamAssist清理消歧義連結:Go(改連結至Go語言)。)
(差異) ←上個修訂 | 最新修訂 (差異) | 下個修訂→ (差異)
跳至導覽 跳至搜尋
Stackless Python
原作者Christian Tismer
開發者Anselm Kruis
首次發布1998年,​28年前​(1998
當前版本v3.8.1-slp(2021年8月12日,​4年前​(2021-08-12
原始碼庫
  • {{URL|example.com|可选的显示文本}}
Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
程式語言C, Python
引擎
    Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
    作業系統Linux, Windows
    類型解釋器
    許可協議Python軟體基金會許可證

    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). 

    參閱[編輯]

    外部連結[編輯]