首页 > 编程知识 正文

异步和多线程的区别(一篇文章,搞懂异步和多线程的区别)

时间:2023-05-05 14:44:58 阅读:122082 作者:433

最近,我在研究Spring Boot中的异步处理,发现了许多与异步和多线程相关的知识点。 首先写几篇关于异步和多线程的文章,试着大力回顾和学习相关的知识点。 正文的内容如下所示。

前言本文以简单易懂的方式介绍异步编程和多线程编程,并介绍它们的区别。

首先看看什么是异步编程,异步模型。 异步模型可以同时发生(处理)多个事件。 当程序调用耗时的功能(方法)时,程序将继续在下面运行,而不会阻止程序的运行进程。 功能执行完成后,程序可以获取执行完成的消息,也可以访问执行的结果。 有返回值或需要返回值时)。

下面的示例演示同步和异步之间的区别。 示例程序通过网络获取两个文件,然后合并处理这两个文件。

在上述示例中,异步系统中的解决方案是打开另一个线程进行处理。 第一个线程获取第一个文件,第二个线程获取第二个文件。 第二个线程不需要等待第一个线程运行。 两个线程获得相应结果后,重新同步合并结果的操作。

让我们看看另一个场景。 单线程方式需要读取操作系统(OS )中的文件,进行数学运算。 另一方面,在异步系统中,程序开始请求读取操作系统中的文件。 由于读取操作需要时间,因此在等待文件读取时,程序将控制器返回给CPU进行数学运算。

异步编程通常为耗时的功能提供函数。 函数的参数包含用于回调的其他参数。 这个函数经常被称为回调函数。 完成耗时的功能运行后,回调函数将返回结果。 有关回调函数的知识,请参阅文章《两个经典例子让你彻底理解java回调机制》。

多线程编程多线程是指同时或并行执行多个指令(线程)。

在单核处理器中,多线程往往会给人一种程序并行运行的错觉。 实际上,处理器通过调度算法在多线程之间进行切换和调度。 或者,通过外部输入(中断)和线程的优先顺序的组合进行线程的切换。

在多核处理器中,线程才是真正的并行执行。 多个处理器同时运行多个线程,以实现更高效的处理。

一个简单的例子是打开两个浏览器窗口同时下载两个文件。 每个窗口都使用新线程下载文件。 它们之间不需要等待谁完成,而是并行下载。

下图显示了同时运行多线程APP应用程序的过程。

与异步多线程的区别在于,从上述说明中可以看出,所有多线程都是功能的并发执行。 异步编程涉及函数之间的无阻塞执行,可以将异步应用于单线程或多线程。

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

例如,你和朋友决定一起做午饭。 “异步”是你对朋友说:“去商店买意大利面,回来的时候告诉我,一起做午饭。 你买意大利面的同时,我去准备番茄酱和饮料。 ”

然后“线程”说:“烧水,加热番茄酱。 水开的时候,我告诉我把意大利放了进去。 番茄酱热了的话可以加奶酪。 两者完成后,可以坐下来一起吃晚饭。 ”线程的示例提供了“When,Do”事件的顺序。 这些顺序表示每个人(线程)的指令集的顺序。

从上面的示例可以看到,多线程与特定执行者相关,异步与任务相关。

多线程是编程的逻辑层概念,是进程中同时运行的代码,可以在线程之间切换执行。

异步和同步是相对的,异步是相互独立的,在等待某个事件的时候继续做自己的事情,不需要等那个事件完成再工作。

多线程是实现异步的一种方法。 异步是指调用该方法的主线程不需要同步等待另一个线程的完成,而是允许主线程做其他事情。

因此,异步和多线程本质上并不是同等的关系。 异步是最终目的,多线程只是实现异步的手段。

如何选择面对多线程和异步? 其实,通常选择的依据主要取决于性能。

那么,在同步/异步和单线程/多线程的所有组合中,哪个模型能提供更好的性能?

这意味着异步多线程可以充分利用具有大量I/O处理和不同计算的大型APP应用程序的计算资源,并考虑非阻塞函数。 这也是所有操作系统都采用的线程模型。

异步操作复杂度高,程序主要采用回调方式处理,与一般思路略有不同,调试困难。 多线程的使用(滥用)会给系统增加额外的上下文切换负担,线程之间的共享变量可能会导致死锁。

因此,实现这两种模式经常需要处理资源冲突、死锁、资源共享和回调事件等问题。

本文介绍了异步编程和多线程编程的定义,以及它们之间的区别。 本文的所有术语和概念都与具体技术的实现无关。 稍后将讨论与多线程异步相关的其他知识点,例如异步调用和回调。

原文链接: 《一篇文章,搞懂异步和多线程的区别》

程序的新视野

在同时提升公众号“程序新视野”、软实力、硬件技术的平台上,提供海量资料

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。