资讯专栏INFORMATION COLUMN

同步、异步、堵塞、非堵塞概念总结

caikeal / 3305人阅读

摘要:总结同步服务依赖任务的执行结果异步服务不依赖任务的执行结果阻塞服务执行时线程会出现等待状态非阻塞不服务执行时线程不会出现等待状态

同步、异步、堵塞、非堵塞对于程序员来说都不会陌生,无论是看相关书籍,还是面试,都会涉及到这四个词,下面给出我的理解,如有不对请多指教。

同步与异步

服务(Service)被分割成多个任务(Task),服务的执行结果是否要求任务最终按顺序执行。服务的结果依赖所有任务的执行称为同步服务;服务的结果不依赖所有的任务称为异步服务。下面举例说明:

同步

服务(Service)开始被分割为TaskA,TaskB,TaskC三个任务,TaskB的执行依赖于TaskA的执行,服务最后结果依赖于TaskB、TaskC,所有任务对业务来说都是同步操作。(这里也可以把TaskA、TaskB理解成一个任务,当然啦可以把TaskA、TaskB、TaskC理解成一个任务。我们平时写的比较多的就是同步代码)

异步

服务(Service)开始被分割为TaskA,TaskB,TaskC三个任务,TaskB的执行依赖于TaskA的执行,业务最后结果依赖于TaskB,TaskC的执行结果或者说TaskC中涉及到的数据对服务来说不重要甚至是不需要,所以TaskC任务对于业务来说是一个异步操作,也可以说是一个异步服务。

阻塞和非阻塞

如果说线程是程序工作的基本单位、服务是要处理的内容,那么阻塞是指工作线程需要等待服务的响应结果才会处理下一个服务,否则工作线程会一直处于等待状态。非阻塞是指工作线程不需等待结果直接处理下一个服务。

阻塞

服务的执行在Handler结果返回之前,工作线程会一直等待。

非阻塞

服务的执行不依赖Handler返回结果,工作线程直接处理下一个服务。

总结

同步:服务依赖任务的执行结果

异步:服务不依赖任务的执行结果

阻塞:服务执行时线程会出现等待状态

非阻塞:不服务执行时线程不会出现等待状态

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/68118.html

相关文章

  • JS基础——异步回调

    摘要:回调大多出现在请求,用于处理收到的请求结果。回调函数和异步一开始我被回调和异步有点搞晕了。异步编程的实现就我目前知道两种回调函数和事件监听,其实看了阮神的异步编程的文章和下面的评论之后得出的理解。为了不影响的执行,我们可以把写成的回调函数。 前言 一个刚入前端的小菜,虽然以前看到过关于回调的文章,但是呢,理解起来有点费劲啊。当时的脑海里就一个概念。 回调:大多出现在Ajax请求,用于处...

    tianhang 评论0 收藏0
  • JS与Node.js中的事件循环

    摘要:的单线程,与它的用途有关。特点的显著特点异步机制事件驱动。队列的读取轮询线程,事件的消费者,的主角。它将不同的任务分配给不同的线程,形成一个事件循环,以异步的方式将任务的执行结果返回给引擎。 这两天跟同事同事讨论遇到的一个问题,js中的event loop,引出了chrome与node中运行具有setTimeout和Promise的程序时候执行结果不一样的问题,从而引出了Nodejs的...

    abson 评论0 收藏0
  • JS专题之事件循环

    摘要:宏任务需要多次事件循环才能执行完。总结事件循环是和事件调用机制的核心,保证了页面可以有序无阻塞的进行。事件循环的主要逻辑是先执行调用栈,直到清空调用栈只剩下全局上下文。微任务执行后完,进行页面渲染和垃圾回收后进行下一轮事件循环。 准备知识 1. 进程(process) 进程是系统资源分配一个独立单位,一个程序至少有一个进程。比方说:一个工厂代表一个 CPU, 一个车间就是一个进程,任一...

    mengera88 评论0 收藏0
  • Java并发

    摘要:对象改变条件对象当前线程要等待线程终止之后才能从返回。如果线程在上的操作中被中断,通道会被关闭,线程的中断状态会被设置,并得到一个。清除线程的中断状态。非公平性锁虽然可能造成饥饿,但极少的线程切换,保证其更大的吞吐量。 声明:Java并发的内容是自己阅读《Java并发编程实战》和《Java并发编程的艺术》整理来的。 showImg(https://segmentfault.com/im...

    SKYZACK 评论0 收藏0
  • 切图崽的自我修养-加载JS的常见方式

    摘要:总而言之,只有先构建了对应的你才能用脚本去操作它所以这就是如果在中写内联不加经常报错的原因,通常因为找不到对应的这也是我们为什么通常把外链放在底部进行加载确保了和加载完毕主要内容已经呈现给用户确保了和加载完毕所有处于可操作状态 前言 我就想随便找个地方放东西不行吗? 看别人写的代码,中写原生js无一例外加了window.onload, jquery示例中无一例外的加了 $(funct...

    王军 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<