【问题标题】:Asyncio: legitimate multiple threads with event loops use cases?Asyncio:具有事件循环用例的合法多线程?
【发布时间】:2023-01-08 04:32:05
【问题描述】:

诚然,考虑到 GIL,经典的asyncio 设计应该关注其中的“单主线程和单事件循环”。尽管如此,是否存在合法的“具有多个事件循环的多线程”用例,这比单一用例带来了一些架构或性能优势?请分享。

【问题讨论】:

    标签: python multithreading python-asyncio event-loop pyside6


    【解决方案1】:

    我从不比较在多个线程中使用多个事件循环的性能。

    据我所知asynchronous 是一个事件驱动的架构,其中单个事件循环依赖于单个线程并且运行函数是这个event-loop 将等待触发器获得运行时间。这将比线程(理论上)更快,因为我们不再关心资源管理(内存、cpu 等)。

    线程基本上会尝试管理资源以使它们同时运行,因为它实际上是在切换资源使用。

    但是两者都建议并行执行程序,即使它一次不是并发的。为了安全起见,asynchronous 更线程安全,因为它在单线程中。

    【讨论】:

      【解决方案2】:

      发现:一个这样的用例是QEventLoop <-> asyncio.EventLoopPySide6中的“mutual stop-and-go hand-over”模式,当QT事件循环停止自身时,然后允许asyncio事件循环运行一段时间,然后QT 事件循环重新控制,同时共享同一个线程。

      【讨论】:

        猜你喜欢
        • 2023-02-09
        • 2020-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多