所以,我在玩Stackless Python ,一个问题突然出现在我的脑海中,也许这是“假设”或“常见”知识,但我在stackless 站点上的任何地方都找不到它。
Stackless Python是否利用了多核 CPU?在普通的 Python 中,GIL 一直存在,并且要(真正)使用多个内核,您需要使用多个进程,对于Stackless也是如此吗?
所以,我在玩Stackless Python ,一个问题突然出现在我的脑海中,也许这是“假设”或“常见”知识,但我在stackless 站点上的任何地方都找不到它。
Stackless Python是否利用了多核 CPU?在普通的 Python 中,GIL 一直存在,并且要(真正)使用多个内核,您需要使用多个进程,对于Stackless也是如此吗?
Stackless python 不使用它运行的任何类型的多核环境。
这是对 Stackless 的常见误解,因为它允许程序员利用基于线程的编程。对于许多人来说,这两者紧密相连,但实际上是两个独立的东西。
在内部,Stackless 使用循环调度程序来调度每个tasklet(微线程),但没有 tasklet 可以与另一个 tasklet 并发运行。这意味着如果一个小任务很忙,其他小任务必须等到该小任务放弃控制权。默认情况下,调度程序不会停止一个小任务并将处理器时间分配给另一个小任务。tasklet 负责使用 Stackless.schedule() 将自己安排回调度队列的末尾,或者完成其计算。
因此,所有小任务都以顺序方式执行,即使在多核可用时也是如此。
Stackless 不支持多核的原因是因为这使线程变得更加容易。这正是 stackless 的全部意义所在:
Stackless Python 是 Python 编程语言的增强版本。它允许程序员获得基于线程的编程的好处,而不会出现与传统线程相关的性能和复杂性问题。Stackless 添加到 Python 的微线程是一种廉价且轻量级的便利,如果使用得当,可以带来以下好处:
- 改进的程序结构。
- 更具可读性的代码。
- 提高程序员的工作效率。
这是有关多核和无堆栈的更多信息的链接。