25

所以,我在玩Stackless Python ,一个问题突然出现在我的脑海中,也许这是“假设”或“常见”知识,但我在stackless 站点上的任何地方都找不到它。

Stackless Python是否利用了多核 CPU?在普通的 Python 中,GIL 一直存在,并且要(真正)使用多个内核,您需要使用多个进程,对于Stackless也是如此吗?

4

1 回答 1

41

Stackless python 不使用它运行的任何类型的多核环境。
这是对 Stackless 的常见误解,因为它允许程序员利用基于线程的编程。对于许多人来说,这两者紧密相连,但实际上是两个独立的东西。

在内部,Stackless 使用循环调度程序来调度每个tasklet(微线程),但没有 tasklet 可以与另一个 tasklet 并发运行。这意味着如果一个小任务很忙,其他小任务必须等到该小任务放弃控制权。默认情况下,调度程序不会停止一个小任务并将处理器时间分配给另一个小任务。tasklet 负责使用 Stackless.schedule() 将自己安排回调度队列的末尾,或者完成其计算。

因此,所有小任务都以顺序方式执行,即使在多核可用时也是如此。

Stackless 不支持多核的原因是因为这使线程变得更加容易。这正是 stackless 的全部意义所在:

来自官方无堆栈网站

Stackless Python 是 Python 编程语言的增强版本。它允许程序员获得基于线程的编程的好处,而不会出现与传统线程相关的性能和复杂性问题。Stackless 添加到 Python 的微线程是一种廉价且轻量级的便利,如果使用得当,可以带来以下好处:

  • 改进的程序结构。
  • 更具可读性的代码。
  • 提高程序员的工作效率。

这是有关多核和无堆栈的更多信息的链接。

于 2008-12-18T09:43:07.653 回答