gpt4 book ai didi

python - Python tasklet 是否违反了 no "GOTO"规则?

转载 作者:行者123 更新时间:2023-12-02 11:31:56 26 4
gpt4 key购买 nike

我对 Stackless Python 的 tasklet 进行了大量的谷歌研究。每个来源都将其称为线程

stackless.com : Microthreads: tasklets wrap functions allowing them to be launched as microthreads.

disinterest.orgv: Tasklets — Lightweight threads

但是微线程不是并发的。他们执行代码的一部分。

代码如下:

def function(n):
print n
print n
stackless.schedule()

stackless.tasklet(function)(3)
stackless.tasklet(function)(10)
stackless.run()

将打印

3
3
10
10

一个tasklet执行一段代码,直到遇到stackless.schedule(),然后它从头开始或从上次暂停的地方开始执行下一个tasklet。

每个程序员都知道“no GOTO”的黄金法则。我的问题是:

这与 GOTO 有什么不同?
如果微线程不并行执行,那么使用它们有什么优点?
如果它们不是真正的线程,为什么每个消息来源都提到它们作为线程的替代方案?

最佳答案

它与 goto 有什么不同?

这与 goto 不同,因为您没有指定您要去的地方。通过产生你的tasklet(调用stackless.schedule()),你所说的只是“我现在已经完成了;你可以稍后再回复我”,而不是“从第n行开始执行”文件 x"。 “goto 不好”这个建议源于这样一个事实:它允许您编写意大利面条式代码,而程序的执行是不可能遵循的。另一方面,Tasklet(或协程)在这方面要好得多,因为您知道每个 Tasklet 都会运行完成。

如果微线程不并行执行,那么使用它们有什么优点?

并发与并行不同。并行是指两个任务实际上同时运行。并发是指两个任务可以重叠执行,但它们不一定都在同一时刻运行。 Tasklet 是并发的,但不是并行的。 Tasklet 的优点基本上是并发性。

如果它们不是真正的线程,为什么每个消息来源都提到它们作为线程的替代方案?

如果您可以放弃并行性以获得更低的开销,那么它们是线程的替代方案。它们仍然是线程,因为它们仍然允许多个并发执行路径,即使它们不是严格并行的。

关于python - Python tasklet 是否违反了 no "GOTO"规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22850618/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com