Python中的异步async

异步(async)是相对于同步(sync)而言的,异步就是彼此独立,在等待某事件的过程中继续做自己的事,不需要等待这一事件完成后再工作。

什么是异步编程

首先来看一下异步模型。在异步模型中,允许同一时间发生(处理)多个事件。程序调用一个耗时较长的功能(方法)时,它并不会阻塞程序的执行流程,程序会继续往下执行。当功能执行完毕时,程序能够获得执行完毕的消息或能够访问到执行的结果(如果有返回值或需要返回值时)。

下面通过一个示例来看一下同步和异步的区别。示例中程序通过网络获取两个文件,并对两个文件进行合并处理:

在异步系统当中的解决方案是开启一个额外的线程进行处理。第一个线程获取第一个文件,第二个线程获取第二个文件,第二个线程并不需要等待第一个线程执行完毕再执行。当两个线程都获得到对应的结果之后,再重新同步处理合并结果的操作。

再来看另外一个场景。单线程方法读取OS(操作系统)当中的文件并需要进行数学运算。而在异步系统中,程序发起读取OS中文件的请求,由于读取操作比较耗时,在等待读取文件时,程序会将控制器返回给CPU进行数学运算。

在异步编程中,通常会针对比较耗时的功能提供一个函数,函数的参数中包含一个额外的参数,用于回调。而这个函数往往称作回调函数。当比较耗时的功能执行完毕时,通过回调函数将结果返回。

异步与多线程的区别

通过上面的介绍,我们可以看出多线程都是关于功能的并发执行。而异步编程是关于函数之间的非阻塞执行,我们可以将异步应用于单线程或多线程当中。

因此,多线程只是异步编程的一种实现形式

多线程是程序设计的逻辑层概念,它是进程中并发运行的一段代码,可以实现线程间的切换执行。

多线程就是实现异步的一个方式。异步是让调用方法的主线程不需要同步等待另一线程的完成,从而可以让主线程干其它的事情。

所以本质上,异步和多线程并不是一个同等关系,异步是最终目的,多线程只是实现异步的一种手段

如何选择

简而言之,对于具有大量I/O操作和不同计算的大规模应用程序,使用异步多线程有利于充分利用计算资源,并且能够照顾到非阻塞函数。这也是所有操作系统所采用的线程模型。

编写异步操作的复杂程度较高,程序主要使用回调方式进行处理,与正常的思维方式有些出入,而且难以调试。而多线程的使用(滥用)会给系统带来上下文切换的额外负担,并且线程间的共享变量可能造成死锁。

因此在实现这两种模式时,往往需要处理资源竞争、死锁、共享资源和回调事件等问题。

Python中的async和await

Python Async/Await入门指南 - 知乎

相关推荐

  1. C#Async异常处理

    2023-12-28 12:42:03       47 阅读
  2. vueasync

    2023-12-28 12:42:03       26 阅读
  3. Spring Boot异步线程池@Async

    2023-12-28 12:42:03       45 阅读
  4. spring异步@Async方法request丢失问题处理

    2023-12-28 12:42:03       31 阅读
  5. C# async void 、 async Task与async Task<TResult>

    2023-12-28 12:42:03       46 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-28 12:42:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-28 12:42:03       106 阅读
  3. 在Django里面运行非项目文件

    2023-12-28 12:42:03       87 阅读
  4. Python语言-面向对象

    2023-12-28 12:42:03       96 阅读

热门阅读

  1. PyQt 打包成exe文件

    2023-12-28 12:42:03       67 阅读
  2. P8780 [蓝桥杯 2022 省 B] 刷题统计

    2023-12-28 12:42:03       54 阅读
  3. C动态内存分配与释放介绍

    2023-12-28 12:42:03       56 阅读
  4. SSH隧道远程连接局域网的电脑

    2023-12-28 12:42:03       63 阅读
  5. CF1895C

    2023-12-28 12:42:03       46 阅读
  6. 数字孪生在能源电力行业的技术难点和应用场景

    2023-12-28 12:42:03       58 阅读
  7. 设计模式_结构型模式_适配器模式

    2023-12-28 12:42:03       51 阅读
  8. Dubbo协议支持哪些协议?应用场景?

    2023-12-28 12:42:03       48 阅读
  9. 机器学习中异常值的处理方式

    2023-12-28 12:42:03       74 阅读
  10. 换页的算法以及例题

    2023-12-28 12:42:03       66 阅读