首页 > 其他分享 >阻塞非阻塞与同步异步的区别

阻塞非阻塞与同步异步的区别

时间:2022-08-22 20:11:12浏览次数:47  
标签:异步 同步 通知 阻塞 完成 下载

阻塞非阻塞与同步异步的区别

同步/异步关注的是消息通知的机制,而阻塞/非阻塞关注的是程序(线程)等待消息通知时的状态。

以小明下载文件打个比方,

同步阻塞:

小明一直盯着下载进度条,到 100% 的时候就完成。

同步体:

等待下载完成通知;

阻塞体:

等待下载完成通知过程中,不能做其他任务处理;

同步非阻塞:

小明提交下载任务后就去干别的,每过一段时间就去瞄一眼进度条,看到 100% 就完成。

同步体:

等待下载完成通知,但是要在;

非阻塞体:

等待下载完成通知过程中,去干别的任务了,只是时不时会瞄一眼进度条;【小明必须要在两个任务间切换,关注下载进度】

异步阻塞:

小明换了个有下载完成通知功能的软件,下载完成就“叮”一声。不过小明仍然一直等待“叮”的声音(看起来很傻,不是吗)。

异步体:

下载完成“叮”一声通知;

阻塞体:

等待下载完成“叮”一声通知过程中,不能做其他任务处理;

异步非阻塞:

仍然是那个会“叮”一声的下载软件,小明提交下载任务后就去干别的,听到“叮”的一声就知道完成了。

异步体:

下载完成“叮”一声通知;

非阻塞体:

等待下载完成“叮”一声通知过程中,去干别的任务了,只需要接收“叮”声通知即可;【软件处理下载任务,小明处理其他任务,不需关注进度,只需接收软件“叮”声通知,即可】

也就是说,同步/异步是“下载完成消息”通知的方式(机制),而阻塞/非阻塞则是在等待“下载完成消息”通知过程中的状态(能不能干其他任务)。

总结

同步和异步仅仅是关注的消息如何通知的机制,而阻塞与非阻塞关注的是等待消息通知时的状态。

标签:异步,同步,通知,阻塞,完成,下载
From: https://www.cnblogs.com/FinallySSR/p/16614080.html

相关文章

  • springboot使用@Async实现异步调用
    异步与同步同步就是整个处理过程顺序执行,当各个过程都执行完毕,并返回结果。异步调用则是只是发送了调用的指令,调用者无需等待被调用的方法完全执行完毕;而是继续执行......
  • uni-app左右列表同步高亮滚动
    最近在做点单小程序,其中左边是一级菜单,右边是商品列表,其中需求为左边点击高亮后,右边商品列表要滑动至相应的可视区域,同时右边商品列表滚动,左边的一级菜单可跟着可是区域的......
  • Canal 同步表级DDL 表过滤 正则
    原文:Canal常用配置-EasyCms--博客园(cnblogs.com) 基于日志增量订阅&消费的业务:数据库镜像数据库实时备份多级索引(卖家和买家各自分库索引)searchbuild......
  • 10.异步mysql
    python中操作mysql连接、操作、断开都是网络IO#安装支持异步aiomysql的模块pip3installaiomysqlasyncdefexecute():#网络IO操作,连接数据库,遇到IO切换任务......
  • 2022.8.21 Forkjoin与异步回调
    14、Forkjoin(分支合并)什么是ForkJoinForkJoin在JDK1.7, 并行执行任务!提高效率。在大数据量中!大数据:MapReduce(把大任务拆分为小任务)Forkjoin特点:工作窃取,这里......
  • 2022.8.21 读写锁与阻塞队列
    9、读写锁   自定义的缓存,没有加锁,就会出现一个没有写入完成,另一个突然插进来的情况 packagecom.xing.rw; ​ importjava.util.HashMap; importjava.util.......
  • 异步和多线程区别
    异步和多线程区别异步和多线程有什么区别其实,异步是目的,而多线程是实现这个目的的方法。异步是说,A发起一个操作后(一般都是比较耗时的操作,如果不耗时的操作就没有必要异步......
  • ASP.Net Core异步编程
    ASP.NetCore异步编程概念什么是异步编程?异步编程是可以让程序并行运行的一种手段,其可以让程序中的一个工作单元与主应用程序线程分开独立运行,并且在工作单元运行结束后......
  • 2022.8.20 线程同步
    6、线程同步1.介绍多个线程操作同一个资源     由于同一进程的多个线程共享同一块存储空间,在带来方便的同时,也带来了访问冲突问题,为了保证数据在方法中......
  • thinkphp+ajax+jquery异步实现加载更多
    1.后台请求的方法(这里主要赋模板,再查出总页数)publicfunction_initialize(){parent::_initialize();$this->model['farm']=D('farm');$this->model[......