【发布时间】:2023-01-08 04:32:05
【问题描述】:
诚然,考虑到 GIL,经典的asyncio 设计应该关注其中的“单主线程和单事件循环”。尽管如此,是否存在合法的“具有多个事件循环的多线程”用例,这比单一用例带来了一些架构或性能优势?请分享。
【问题讨论】:
标签: python multithreading python-asyncio event-loop pyside6
诚然,考虑到 GIL,经典的asyncio 设计应该关注其中的“单主线程和单事件循环”。尽管如此,是否存在合法的“具有多个事件循环的多线程”用例,这比单一用例带来了一些架构或性能优势?请分享。
【问题讨论】:
标签: python multithreading python-asyncio event-loop pyside6
我从不比较在多个线程中使用多个事件循环的性能。
据我所知asynchronous 是一个事件驱动的架构,其中单个事件循环依赖于单个线程并且运行函数是这个event-loop 将等待触发器获得运行时间。这将比线程(理论上)更快,因为我们不再关心资源管理(内存、cpu 等)。
线程基本上会尝试管理资源以使它们同时运行,因为它实际上是在切换资源使用。
但是两者都建议并行执行程序,即使它一次不是并发的。为了安全起见,asynchronous 更线程安全,因为它在单线程中。
【讨论】:
发现:一个这样的用例是QEventLoop <-> asyncio.EventLoopPySide6中的“mutual stop-and-go hand-over”模式,当QT事件循环停止自身时,然后允许asyncio事件循环运行一段时间,然后QT 事件循环重新控制,同时共享同一个线程。
【讨论】: