24

所以,我在玩弄Stackless Python,並在腦海中彈出一個問題,也許這是「假設」或「常見」的知識,但我找不到它實際上寫在stackless site上的任何地方。無堆棧的python和多核?

Stackless Python是否利用多核CPU?在普通的Python中,GIL不斷出現,並且(真)使用多個核心來使用多個進程,這對於Stackless也是如此嗎?

+0

aka合作多任務.. – 2011-01-21 13:58:15

回答

39

stackless python does not利用它運行的任何一種多核心環境。
這是關於Stackless的常見誤解,因爲它允許程序員利用基於線程的編程。對於很多人來說,這兩者緊密相連,但實際上是兩件獨立的事情。

內部堆棧使用循環調度程序來調度每個tasklet(微線程),但是沒有任務tasklet可以與另一個同時運行。這意味着如果一個tasklet忙,其他人必須等到該tasklet放棄控制。默認情況下,調度程序不會停止一個tasklet並將處理器時間給予另一個。 tasklet的責任是使用Stackless.schedule()或者通過完成計算來將自己安排回到計劃隊列的末尾。

即使在multiplpe核心可用時,所有任務小程序因此仍以順序方式執行

Stackless沒有多核支持的原因是因爲這使得線程變得更加簡單。而這僅僅是無堆疊的意義所在:

from the official stackless website

Stackless的Python是一個增強版本 了Python編程語言 。它允許程序員通過 編程獲得基於線程的 編程的好處,而不需要性能 以及與傳統線程相關的複雜性問題 。該 微線程是Stackless的增加 的Python是一種廉價,輕便 便利工具,如果使用 得當,具有以下優點:

  • 改進程序結構。
  • 更多可讀的代碼。
  • 提高程序員生產力。

這裏是一個link至多個內核和無堆疊一些更多的信息。