程序中所谓「异步」和「并发」的区别有哪些

小编 1244

程序中所谓「异步」和「并发」的区别有:1.定义不同;2.性质不同;3.关注点不同;4.侧重点不同。定义不同在于,异步是彼此独立执行,即主线程无需等待另一线程的完成;而并发指同一时间段有几个程序都处于已启动到运行完毕之间,并都在同一个处理机上运行。

1.定义不同

异步和同步相对,同步是顺序执行,而异步是彼此独立,在等待某个事件的过程中继续做自己的事,不要等待这一事件完成后再工作。线程是实现异步的一个方式,异步是让调用方法的主线程不需要同步等待另一个线程的完成,从而让主线程干其他事情。

而并发是指同一时间段有几个程序都处于已经启动到运行完毕之间,并且这几个程序都在同一个处理机上运行,并发的两种关系是同步和互斥。

2.性质不同

异步跟同步做对比,它们是编程模型。如果先完全处理完一个,再处理下一个,那模式就是同步的;如果处理到半途又去处理另一个任务,那就是异步的。而并发跟并行做对比,它们是操作系统(或运行时)的多任务调度模型。

3.关注点不同

异步关注的是给定两个以上的待处理任务,你按照怎样的执行顺序去处理它们;而并发关注的是同一时间有没有两个以上的未结束任务待处理。

4.侧重点不同

异步不强调 “同时”,但并发强调让任务 “同时” 执行,不论是真同时,还是感觉上同时。例如,正在被CPU执行的任务一可以被任务二打断。在异步环境下,任务二在打断任务一后,可以一直被执行下去,不用考虑是否做到让人类觉得 “同时” 在执行两个任务,即任务二可以一直执行下去,当然是否需要让任务二一直执行下去,视业务需要。但在并发环境下,任务二的时间片用完后,就必须将CPU交给任务一了,任务一继续被执行,任务一时间片用完后,就需要把CPU交给任务二了,这样快速交替下去,让人感觉,这两个任务似乎在同时执行。

延伸阅读

多线程和异步操作的区别有哪些

多线程和异步操作两者都可以达到避免调用线程阻塞的目的,从而提高软件的可响应性。甚至有些时候我们就认为多线程和异步操作是等同的概念。但是,多线程和异步操作还是有一些区别的。而这些区别造成了使用多线程和异步操作的时机的区别。

1.本质的区别

异步操作的本质:所有的程序最终都会由计算机硬件来执行,所以为了更好的理解异步操作的本质,我们有必要了解一下它的硬件基础。 熟悉电脑硬件的朋友肯定对DMA这个词不陌生,硬盘、光驱的技术规格中都有明确DMA的模式指标,其实网卡、声卡、显卡也是有DMA功能的。DMA就是直接内存访问的意思,也就是说,拥有DMA功能的硬件在和内存进行数据交换的时候可以不消耗CPU资源。只要CPU在发起数据传输时发送一个指令,硬件就开始自己和内存交换数据,在传输完成之后硬件会触发一个中断来通知操作完成。这些无须消耗CPU时间的I/O操作正是异步操作的硬件基础。所以即使在DOS这样的单进程(而且无线程概念)系统中也同样可以发起异步的DMA操作。

线程的本质:线程不是一个计算机硬件的功能,而是操作系统提供的一种逻辑功能,线程本质上是进程中一段并发运行的代码,所以线程需要操作系统投入CPU资源来运行和调度。

2.适用范围的区别

当需要执行I/O操作时,使用异步操作比使用线程+同步I/O操作更合适。I/O操作不仅包括了直接的文件、网络的读写,还包括数据库操作、Web Service、HttpRequest以及.Net Remoting等跨进程的调用。

而线程的适用范围则是那种需要长时间CPU运算的场合,例如耗时较长的图形处理和算法执行。但是往往由于使用线程编程的简单和符合习惯,所以很多朋友往往会使用线程来执行耗时较长的I/O操作。这样在只有少数几个并发操作的时候还无伤大雅,如果需要处理大量的并发操作时就不合适了。

回复

我来回复
  • 暂无回复内容

注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部