同步(Synchronous)和异步(Asynchronous)
同步异步是啥?打个⽐⽅:
定义:同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)。同步,就是调⽤某个东西是,调⽤⽅得等待这个调⽤返回结果才能继续
往后执⾏。异步,和同步相反调⽤⽅不会理解得到结果,⽽是在调⽤发出后调⽤者可⽤继续执⾏后续操作,被调⽤者通过状体来通知调⽤者,或者通过回掉函数来处理这个调⽤
同步通信和异步通信的区别⽐⽅说:你去商城买东西,你看上了⼀款⼿机,能和店家说你⼀个这款⼿机,他就去仓库拿货,你得在店⾥等着,不能离开,这叫做同步。现在你买⼿机赶时髦直接去京东下单,
下单完成后你就可⽤做其他时间(追剧、打王者、lol)等货到了去签收就ok了.这就叫异步。
更具体点拿我们的⽅法调⽤来举例⼦:
同步⽅法调⽤⼀旦开始,调⽤者必须等到⽅法调⽤返回后,才能继续后续的⾏为。
异步⽅法调⽤更像⼀个消息传递,⼀旦开始,⽅法调⽤就会⽴即返回,调⽤者就可以继续后续的操作。⽽,异步⽅法通常会在另外⼀个线程中,“真实”地执⾏着。整个过程,不会阻碍调⽤者的⼯作
我加两张图让你更好理解
同步执⾏
同步执⾏当调⽤⽅法执⾏完成后并返回结果,才能执⾏后续代码
异步执⾏
异步调⽤的话可⽤参考ajax,调⽤⽅法后不会等到sum⽅法执⾏完成,⽽是直接执⾏后续代码。sum⽅法执⾏完成后主要通过状态通知主线程,或者通过回调处理这次异步⽅法执
⾏的结果
同步异步于阻塞⾮阻塞不能混为⼀谈
看了上⾯的讲解,你可能会说这不就是阻塞机制吗?不不不,同步异步不能和阻塞⾮阻塞混为⼀谈。
阻塞和⾮阻塞强调的是程序在等待调⽤结果(消息,返回值)时的状态. 阻塞调⽤是指调⽤结果返回之前,当前线程会被挂起。调⽤线程只有在得到结果之后才会返回。⾮阻塞调
⽤指在不能⽴刻得到结果之前,该调⽤不会阻塞当前线程。对于同步调⽤来说,很多时候当前线程还是
激活的状态,只是从逻辑上当前函数没有返回⽽已,即同步等待时什么都不⼲,⽩⽩占⽤着资源。
同步和异步强调的是消息通信机制 (synchronous communication/ asynchronous communication)。所谓同步,就是在发出⼀个"调⽤"时,在没有得到结果之前,该“调⽤”就不返
回。但是⼀旦调⽤返回,就得到返回值了。换句话说,就是由“调⽤者”主动等待这个“调⽤”的结果。⽽异步则是相反,"调⽤"在发出之后,这个调⽤就直接返回了,所以没有返回结果。换句话说,当⼀个异步过程调⽤发出后,调⽤者不会⽴刻得到结果。⽽是在"调⽤"发出后,"被调⽤者"通过状态、通知来通知调⽤者,或通过回调函数处理这个调⽤
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论