我是twisted 库的新手,我试图了解python/twisted 中的操作是如何异步执行的。到目前为止,我认为只有类似 GUI(Qt 或 javascript)的平台广泛使用事件驱动架构。
事实:
- 扭曲的程序在一个线程中运行 = 没有多线程
- 使用了 reactor 和 deferred 模式:声明了回调/errbacks,所有内容的执行都由 reactor 主循环控制
- 单个 CPU 永远无法真正并行执行任何操作,因为它在进程之间共享其资源等。并行代码执行是指编程平台(python、javascript 等)执行多个操作序列(可以完成,例如,使用多线程)
问题 1
Python 可以被视为操作系统的高级包装器。提供异步操作处理的 OS 函数(或 C 函数)是什么?有吗?
问题2
Q1 让我想到了一个想法,twisted 的异步性并不是真正的异步性,就像我们在 Javascript 中那样。例如,在 JavaScript 中,如果我们提供 3 个不同的按钮,将回调函数附加到它们并单击所有三个按钮 - 那么这 3 个回调将并行执行。真正并行。
在 Twisted 中 - 据我了解 - 这不是真正的异步 - 比方说,它是近似的异步,因为不会并行执行任何操作(就代码而言,正如我在 fact3 中提到的那样)。在 Twisted 中,前 n 行代码(定义协议、工厂、连接等)是对整个系统启动时将要发生的事情的声明。到目前为止什么都没有。真正的执行开始,然后reactor.run()
被触发。我了解反应器运行时基于单个while True
循环遍历事件。反应器检查任何等待执行的任务,处理它们,将它们的结果发送回队列(回调或 errbacks)。在下一个循环执行中,它们将被进一步处理。所以延迟执行实际上是线性的(尽管从外部看起来它是并行执行的)。我的解释正确吗?
如果有人能回答我的问题和/或解释异步如何在扭曲/python 平台中工作以及它与操作系统有何关系,我将不胜感激。提前感谢您的良好解释!
编辑:非常欢迎指向解释异步性的文章的链接!