网站首页 > 技术文章 正文
主体
同步/异步:针对的主体是客户端。
阻塞/非阻塞:针对的主体是服务端。
概述
同步:客户端发出请求等待返回数据后才会进行下一步操作;应用程序在数据未返回期间处于阻塞状态(类似于僵死)。
异步:客户端请求发出后,不用等待返回结果,即可执行下一步操作;当数据返回时,通过状态、通知或回调获取数据。
阻塞:服务器调用函数时在结果返回之前,当前线程会被阻塞挂起;函数只有在得到结果之后才会返回。
非阻塞:服务器调用函数时 若此函数的结果不能立刻返回(比如IO操作),该函数不会被阻塞挂起而是立刻返回(当然此时返回的结果不会是我们需要的 所以要做额外的处理)。
单看这些概述是不是觉得还不错呢,感觉可以分清楚了呢!然而日常面试或者使用中更多则谈及的是他们组合使用。
这里要谈一个很重要的点:客户端计算机处理请求调用的时候在内核有两个操作会阻塞应用程序的运行,第一个是等待数据的过程(IO或硬盘数据的读取等),第二个是把数据从内核空间拷贝到用户空间的过程;以上两步操作哪怕只有一丁点的阻塞那么这个处理都是同步的 即客户端会有僵死状态的出现,哪怕这个僵死的时间只有0.01秒。异步请求对于以上两步的操作是全程无阻塞的都会由系统操作完毕后再进行通知回调,即客户端不会有一丝一毫的僵死,所以异步的阻塞与非阻塞的组合对于客户端的体验以及性能影响不大,故很少谈及他们。所以下面我也将只针对同步阻塞同步非阻塞与异步非阻塞组合展开介绍。
同步阻塞
用户空间的应用程序发起调用,这会导致应用程序阻塞。这意味着应用程序会一直阻塞,直到调用完成为止(数据传输完成或发生错误)。阻塞线程会被挂起应用程序处于一种不再消费 CPU 而只是简单等待响应的状态。
同步非阻塞
非阻塞的实现是发起的调用可能并不会立即满足,需要应用程序调用许多次来等待操作完成。这可能效率不高,因为在很多情况下,当内核执行这个命令时,应用程序必须要进行忙碌等待,直到数据可用为止。对于同步非阻塞的实现除了轮询之外还有我们平时所说的多路IO复用及信号驱动,因为不管是哪一种策略都会在第二步被阻塞。
异步非阻塞
异步虽好,但编程的复杂度相比于同步可不是一个维度的存在。
本猿是一名自学而成的JAVA程序猿,仅此记录个猿的学习过程及理解,无误导他猿之嫌。
对于知识的理解可能会有偏颇,以上内容也仅仅是我的个猿的总结观点,如有错误纰漏还请不吝赐教,我会及时改正。
“知行合一是我将为之追求一生的信条”
- 上一篇: 同步IO、异步IO、阻塞IO、非阻塞IO之间的区别与联系
- 下一篇: 阻塞、非阻塞、同步、异步 的区别
猜你喜欢
- 2024-10-21 面试官:NIO非阻塞网络编程原理了解吗?一文深度讲解避坑
- 2024-10-21 Java阻塞队列中的异类,SynchronousQueue底层实现原理剖析
- 2024-10-21 超详细的I/O多路复用概念、常用I/O模型、系统调用等介绍
- 2024-10-21 非阻塞同步算法与CAS(比较和交换)无锁算法 - 美因茨
- 2024-10-21 为什么要学IO模型(同步阻塞,异步非阻塞)?
- 2024-10-21 非阻塞同步机制和CAS 治疗青光眼的药物中,降压机制是使阻塞房角开放的是
- 2024-10-21 一文彻底搞定(阻塞/非阻塞/同步/异步)网络IO、并发编程模型
- 2024-10-21 一文搞懂什么是阻塞IO、信号驱动IO、Reactor模型、零拷贝
- 2024-10-21 Java面试常见问题:阻塞与非阻塞,同步与异步
- 2024-10-21 聊聊Java BIO(同步阻塞IO)、NIO(非阻塞IO)、AIO(异步IO)
你 发表评论:
欢迎- 11-19零基础学习!数据分析分类模型「支持向量机」
- 11-19机器学习 | 算法笔记(三)- 支持向量机算法以及代码实现
- 11-19我以前一直没有真正理解支持向量机,直到我画了一张图
- 11-19研一小姑娘分享机器学习之SVM支持向量机
- 11-19[机器学习] sklearn支持向量机
- 11-19支持向量机
- 11-19初探支持向量机:用大白话解释、原理详解、Python实现
- 11-19支持向量机的核函数
- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)