我是 twisted 库的新手,我想了解 python/twisted 中的操作是如何异步执行的。到目前为止,我认为只有类 GUI(Qt 或 javascript)平台广泛使用事件驱动架构。
事实:
- Twisted 程序在一个线程中运行 = 没有多线程
- 使用 react 器和延迟模式:声明回调/错误返回,一切的执行都由 react 器主循环控制
- 单个 CPU 永远无法真正并行地执行任何操作,因为它在进程之间共享资源等。并行代码执行是指编程平台(python、javascript 等)执行多个操作序列(可以完成,例如,使用多线程)
问题 1
Python 可以看作是操作系统的高级包装器。提供异步操作处理的 OS 函数(或 C 函数)是什么?有吗?
问题 2
Q1 让我想到了一个想法,即 twisted 的异步性并不是真正的异步性,就像我们在 Javascript 中所拥有的那样。例如,在 JavaScript 中,如果我们提供 3 个不同的按钮,为它们附加回调函数,然后我们单击所有三个按钮 - 那么 3 个回调将并行执行。真正并行。
在 Twisted 中——据我所知——这不是真正的异步——它是,比方说,近似异步,因为不会并行执行任何操作(就代码而言,正如我在事实 3)。在 Twisted 中,前 n 行代码(定义协议(protocol)、工厂、连接等)是整个系统启动时将要发生的事情的声明。到目前为止什么都没有。真正的执行开始,然后 reactor.run()
被触发。我知道 react 堆运行时基于单个 while True
循环,循环遍历事件。 react 器检查任何等待执行的任务,处理它们,将它们的结果发送回队列(回调或错误返回)。在下一个循环执行中,它们将被进一步处理。所以延迟执行实际上是线性的(尽管从外部看起来它是并行执行的)。我的解释正确吗?
如果有人能回答我的问题和/或解释异步性在 twisted/python 平台中的工作原理以及它与操作系统的关系,我将不胜感激。预先感谢您的良好解释!
编辑:非常欢迎解释异步性的文章链接!
最佳答案
如果不更准确地定义很多术语并质疑你的事实,很难谈论这个,但这是我的尝试:
问题一:
尝试 man select
,这大致是 Twisted 的实现方式 - 这是一种要求操作系统同时监视多个事物并让应用程序知道其中任何一个何时触发的方法(阻塞多件事)。
问题二:
是的,差不多 - 但你对 Javascript 的看法是错误的,它就像 Twisted。
关于python - 从操作系统的角度理解 python 扭曲的异步性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19211578/