理解python在操作系统方面的扭曲异步性

duc*_*cin 6 python asynchronous twisted

我是扭曲的库的新手,我试图理解如何完成python/twisted中的操作是异步执行的.到目前为止,我认为只有GUI相似(Qt或javascript)平台广泛使用事件驱动架构.

事实:

  • 扭曲的程序在一个线程中运行=没有多线程
  • 使用reactor和deferred模式:声明回调/错误,并且所有内容的执行都由reactor主循环控制
  • 单个CPU永远不能真正并行执行任何操作,因为它在进程之间共享资源等.通过并行代码执行,我的意思是编程平台(python,javascript,无论如何)执行多个操作序列(可以完成,例如,使用多线程)

问题1

Python可以被视为操作系统的高级包装器.提供异步操作处理的OS功能(或C功能)是什么?有吗?

问题2

Q1引出了一个想法,扭曲的异步性不是真正的异步性,就像我们在Javascript中所做的那样.例如,在JavaScript中,如果我们提供3个不同的按钮,将回调函数附加到它们,我们单击所有三个按钮 - 然后将并行执行3个回调.真正平行.

在扭曲的-据我了解-这不是真的不同步性-它,让我们说,近似异步相反,因为没有操作都将并行执行(在代码方面,正如我在fact3提到).在Twisted中,前n行代码(定义协议,工厂,连接等)是整个系统启动时将要发生的事情的声明.到目前为止还没有运行.真正的执行开始然后reactor.run()被触发.我知道reactor运行时基于单个while True循环遍历事件的循环.reactor会检查所有等待执行的任务,处理它们,将结果发送回队列(回调或错误).在下一个循环执行中,它们将进一步处理.因此,延迟执行实际上是线性的(尽管从外部看起来它看起来像并行执行).我的解释是否正确?

如果有人能够回答我的问题和/或解释在扭曲/ python平台中异步性如何工作以及它与操作系统有什么关系,我将不胜感激.在此先感谢您的好解释!

编辑:非常欢迎链接到解释异步性的文章!

Tho*_*mas 5

如果不更准确地定义很多术语并对你的事实提出异议,就很难谈论这个问题,但这是我的尝试:

问题1:

尝试man select,这大约是Twisted的实现方式 - 这是一种要求操作系统同时监视多个事物的方法,让应用程序知道它们中的任何一个触发(阻止多个事物).

问题2:

是的,差不多 - 但你对Javascript的看法不对,就像Twisted一样.

  • Q1:基本上,但实际的 api 是“操作系统,告诉我我感兴趣的文件描述符中的哪些已准备好读/写”,而不是“我可以执行此 IO 操作吗?好吧,这个怎么样? ” 没错——它陷入了一个永远无法退出的循环。Q2: javascript _runtime_ 就像twisted一样 - 你看不到反应器循环,但它就在那里 - 它不在 jQuery 中,而是在 Firefox 中。如果您阅读浏览器 JavaScript 实现的源代码,我希望您会看到那里的循环。 (2认同)