彻底理解同步,异步,阻塞,非阻塞

同步、异步调用

  • 同步:线程调用后自己等待结果
  • 异步:线程调用后等待其他线程发送结果

线程调用层面同步异步和阻塞非阻塞并没有明显的差别,可以将二者看作相同的概念。但在IO层面来看二者是有区别的。在了解他们的区别之前首先要看什么是IO?

操作系统的IO

操作系统分为用户态和内核态,应用程序运行在用户空间,所以io请求需要先切换到内核态将数据从内核空间复制到用户空间。总的来说
IO分为两个步骤:

  1. 准备数据
  2. 内核空间数据复制到用户空间

在这里插入图片描述

同步,异步,阻塞,非阻塞IO

阻塞,非阻塞IO表示第一个步骤线程是否被阻塞。
同步,异步表示第二个过程是否阻塞,也就是说这个IO调用的结果是由自己线程调用后获得还是由别的线程在完成复制后由回调函数等方式返回该线程来决定
通过上面的图也可以看到,非阻塞IO在发起IO请求后会一直检查数据是否准备完成。
也就是说非阻塞IO异步IO的区别在于:非阻塞IO在调用后会立即返回一部分已经准备好的数据(也可能是空),而异步IO只会返回完整的数据(返回的数据可能是在调用之后的某个时间)

四种组合

同步阻塞方式:

    发送方发送请求之后一直等待响应。
    接收方处理请求时进行的IO操作如果不能马上等到返回结果,就一直等到返回结果后,才响应发送方,期间不能进行其他工作。

同步非阻塞方式:

	发送方发送请求之后,一直等待响应。
	接受方处理请求时进行的IO操作如果不能马上的得到结果,就立即返回,去做其他事情。
	但是由于没有得到请求处理结果,不响应发送方,发送方一直等待。
	当IO操作完成以后,将完成状态和结果通知接收方,接收方再响应发送方,发送方才进入下一次请求过程。(实际不应用)

异步阻塞方式:

	发送方向接收方请求后,不等待响应,可以继续其他工作。
	接收方处理请求时进行IO操作如果不能马上得到结果,就一直等到返回结果后,才响应发送方,期间不能进行其他操作。 (实际不应用)

异步非阻塞方式:

	发送方向接收方请求后,不等待响应,可以继续其他工作。
	接收方处理请求时进行IO操作如果不能马上得到结果,也不等待,而是马上返回去做其他事情。
	当IO操作完成以后,将完成状态和结果通知接收方,接收方再响应发送方。(效率最高)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
同步非阻塞异步非阻塞是两种不同的函数调用方式。 同步非阻塞是指在发起函数调用后,调用方不会等待函数的结果返回,而是立即继续执行后续的代码。这意味着调用方无需等待函数的执行结果,可以继续处理其他任务。当函数执行完毕后,调用方可以通过轮询或者回调等方式来获取函数的结果。同步非阻塞的优点是能够提高系统的并发性和响应性。 异步非阻塞是指在发起函数调用后,调用方也不会等待函数的结果返回,但是与同步非阻塞不同的是,异步非阻塞会通过回调、事件通知等方式来通知调用方函数的执行结果。调用方可以继续执行其他任务,并在合适的时机处理函数的返回结果。异步非阻塞的优点是能够提高系统的并发性和性能,减少资源的浪费。 总结来说,同步非阻塞异步非阻塞都是在函数调用时不会发生线程阻塞的情况下继续执行后续代码,但区别在于同步非阻塞需要主动轮询或回调来获取函数的结果,而异步非阻塞则通过回调或事件通知等方式传递函数的执行结果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [深入理解同步阻塞同步非阻塞异步阻塞异步非阻塞](https://blog.csdn.net/wangpaiblog/article/details/117236684)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

junius9

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值