WEB开发网
开发学院软件开发Python 可爱的 Python: 用 Python 生成器实现“轻便线程”... 阅读

可爱的 Python: 用 Python 生成器实现“轻便线程”

 2007-03-29 12:04:49 来源:WEB开发网   
核心提示:在 “可爱的 Python”的前面一部分中,David 介绍了一种用生成器和简单的调度程序模拟完整协同程序的方法,可爱的 Python: 用 Python 生成器实现“轻便线程”,我们也许可以用直观的方式来扩展这种调度程序,使其允许对多进程使用极为轻量级的线程,轻便线程比大多数变体都简单得多;大

在 “可爱的 Python”的前面一部分中,David 介绍了一种用生成器和简单的调度程序模拟完整协同程序的方法。我们也许可以用直观的方式来扩展这种调度程序,使其允许对多进程使用极为轻量级的线程。与 Stackless Python 微线程非常相似,伪协同程序“轻便线程”几乎不需要 OS(甚至用户区)线程的上下文切换和内存开销。David 在这里介绍了轻便线程,一种巧妙的解决方案,它用来解决使用普通解决方案处理将涉及大量协同进程的问题。

微线程领域(至少在 Python 中)一直都是 Stackless Python 才能涉及的特殊增强部分。关于 Stackless 的话题以及最近它经历的变化,可能本身就值得开辟一个专栏了。但其中简单的道理就是,在“新的 Stackless”下,延续(continuation)显然是不合时宜的,但微线程还是这个项目 存在的理由。这一点很复杂……

刚开始,我们还是先来回顾一些内容。那么,什么是微线程呢? 微线程基本上可以说是只需要很少的内部资源就可以运行的进程 ― 并且是在 Python 解释器的单个实例中(在公共内存空间中,等等)运行的进程。有了微线程,我们就可能在目前中等性能的 PC 机上运行数以万计的并行进程,还可以每秒钟几十万次地在上下文之间切换。对 fork() 的调用或标准的 OS 线程调用根本不能达到这个程度!甚至所谓的“轻量级”线程库中的线程也比这里提出的微线程“重”好几个数量级。

我在本专栏中介绍的轻便线程的含义与 OS 线程的含义有一点不同。就这点而言,它们与 Stackless 所提供的也不尽相同。在很多方面,轻便线程比大多数变体都简单得多;大多数关于信号、锁定及诸如此类的问题都不存在了。简单性的代价就是,我提出了一种“协作多线程”的形式;我觉得在标准 Python 框架中加入抢占并不可行(至少在非 Stackless 的 Python 2.2 中 — 没有人知道 __future__ 会带来什么)。

1 2 3 4 5 6  下一页

Tags:可爱 Python Python

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接