Asyncio vs Threading in python



我已经在python中使用asyncio与多处理和线程一起使用了一段时间。但我不确定我是否能看到AsyncIO和python线程之间的区别。

Python总是运行单个进程(除非使用多进程),这就是为什么asyncio和多线程很好(两者都在任务之间切换)。在python中,多个线程不能并发执行,因此它们一直在切换。这和asyncio一样,不是吗?

谁能告诉我为什么在某些情况下可能是其中之一更好,为什么?

一句话:

  • 多线程是在操作系统级别实现的并发工具设施。它通常使用抢占式多任务,即并发任务可以在任何地方挂起,让其他任务运行。
  • 异步编程(AsyncIO)是在程序级别实现的并发设施。它通常使用合作多任务,即并发任务只能在标有特殊指令(一般为await)的特定点上挂起。

请注意,这是一个非常简单的描述,设计可以变化很大。多线程通常用于提供程序之间的并发性,并提供并行性,而异步编程则在调度大量并发IO的程序中发挥作用(因此称为AsyncIO)。

Python的特殊之处在于它的多线程功能包含在GIL中:一次只能运行一个线程。这显然大大限制了Python中多线程的有用性。

线程提供比任务(异步编程中的并发单位)更低级别的并发性,但更重。

最新更新