阻塞、非阻塞,同步、异步

重点概念

应用程序与操作系统

操作系统向应用程序提供底层硬件的抽象,应用程序通过操作系统提供的抽象进行IO等操作。为保证操作系统安全,CPU执行指令的时候分为内核态和用户态,操作系统处于内核态拥有较高权限,应用程序处于用户态具有较低权限。
执行IO操作的时候必须经过操作系统,即应用程序通过系统调用的形式向操作系统请求IO操作。这也是为什么需要有一个从内核态到用户态的一个数据拷贝过程。

IO等待与IO读写

以网络IO为例,客户端在执行read方法读取服务端数据从开始到read方法执行结束,中间可以分为两个主要耗时过程:IO等待、IO读写。
IO等待:read方法一开始,客户端应用程序向操作系统主动发起IO请求并进行IO等待,等待服务端向客户端发送数据。
IO读写:客户端操作系统收到服务端发送的数据之后,需要将内核态的数据复制到用户态,这个复制过程就是IO读写。
需要说明的是,数据必须进入用户态之后应用程序才可以对数据进行进一步处理。

阻塞非阻塞

阻塞:应用程序在向操作系统请求IO的时候阻塞等待,直到数据准备完毕。
非阻塞:应用程序请求IO的时候如果数据未准备好、数据未到达,则直接返回无数据标志,而不是阻塞等待,应用程序立得到反馈。

同步和异步

同步:应用程序向操作系统请求IO之后,或是阻塞等待,或是轮询等待,或是通过多路复用器等待,IO等待结束之后主动发起IO读写

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
同步非阻塞异步非阻塞是两种不同的函数调用方式。 同步非阻塞是指在发起函数调用后,调用方不会等待函数的结果返回,而是立即继续执行后续的代码。这意味着调用方无需等待函数的执行结果,可以继续处理其他任务。当函数执行完毕后,调用方可以通过轮询或者回调等方式来获取函数的结果。同步非阻塞的优点是能够提高系统的并发性和响应性。 异步非阻塞是指在发起函数调用后,调用方也不会等待函数的结果返回,但是与同步非阻塞不同的是,异步非阻塞会通过回调、事件通知等方式来通知调用方函数的执行结果。调用方可以继续执行其他任务,并在合适的时机处理函数的返回结果。异步非阻塞的优点是能够提高系统的并发性和性能,减少资源的浪费。 总结来说,同步非阻塞异步非阻塞都是在函数调用时不会发生线程阻塞的情况下继续执行后续代码,但区别在于同步非阻塞需要主动轮询或回调来获取函数的结果,而异步非阻塞则通过回调或事件通知等方式传递函数的执行结果。<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 ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值