同步和异步、阻塞和非阻塞

一、同步和异步

        同步和异步关注的是消息通信机制

1.1 同步概念

        在发出一个 “调用” 时,在没有得到结果之前,该 “调用” 就不返回,但是一旦调用返回,就得到返回值了。换句话说就是由 “调用者” 主动等待调用结果。

1.2 异步概念

        "调用” 发出之后,这个调用就直接返回了,没有返回结果。换句话说,当一个异步过程调用发生后,调用者不会立刻得到结果,而是在 “调用” 发生后,“被调用者” 通过状态通知来通知调用者,或通过回调函数处理这个调用。

1.3 举例

        你打电话问书店老板有没有《分布式系统》这本书,如果是同步通信机制,书店老板会说,你稍等,”我查一下",然后开始查啊查,等查好了(可能是5秒,也可能是一天)告诉你结果(返回结果)。
        而异步通信机制,书店老板直接告诉你我查一下啊,查好了打电话给你,然后直接挂电话了(不返回结果)。然后查好了,他会主动打电话给你。在这里老板通过“回电”这种方式来回调。

二、阻塞和非阻塞

        阻塞和非阻塞关注的是程序等待调用结果(消息,返回值)时的状态。

2.1 阻塞

        阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。

2.2 非阻塞

        非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。

2.3 举例

        1、阻塞:当试图对某个文件进行读写时,发现不能够进行读写操作,程序进入等待状态,直到可以进行读写操作为止(充饭费,人太多也只能在后面排队)

        2、非阻塞: 当试图对某个文件进行读写时,发现不能够进行读写操作,马上返回,不在等待(银行里取款办业务时,领取一张小票,领取完后我们自己可以玩玩手机,当轮我们时,银行的喇叭会通知,这时候我们就可以去了。 )

三、总结

3.1 举例

        老张想要煮开水泡茶喝。此时有两把水壶,一把普通的水壶,一把会响的响水壶。

3.2 同步阻塞

        老张把普通的水壶放到火上,立等水开。

3.3 同步非阻塞

        老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有

3.4 异步阻塞

        老张把响水壶放到火上,立等水开

3.5 异步非阻塞

        老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。

3.6 总结

        1、所谓同步异步,只是对于水壶而言。普通水壶,同步;响水壶,异步。虽然都能干活,但响水壶可以在自己完工之后,提示老张水开了。这是普通水壶所不能及的。同步只能让调用者去轮询自己,造成老张效率的低下。

        2、所谓阻塞非阻塞,仅仅对于老张而言。立等的老张,阻塞;看电视的老张,非阻塞。3.23.4 中老张就是阻塞的,媳妇喊他都不知道。虽然 3.4 中响水壶是异步的,可对于立等的老张没有太大的意义。所以一般异步是配合非阻塞使用的,这样才能发挥异步的效用。

四、常用实现

4.1 BIO

        Blocking I/O 同步阻塞 I/O,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,可以用线程池机制改善。做完一件事情再去做另一件事情,一件事情一定要等前一件事情做完,但是在高并发情况下,效率就很低了。

        适用于:连接数目比较小且固定的架构,这种方式对服务器资源要求比较高。

4.2 NIO

        New I/O 同步非阻塞 I/O,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到有 IO 请求时才启动一个线程进行处理。

        适用于:连接数目多且连接比较短(轻操作)的架构,聊天服务器。

4.3 AIO

        Asynchronous I/O 异步非阻塞 I/O,服务器实现模式为一个有效请求一个线程,客户端的 IO 请求都是由 OS 先完成了再通知服务器去启动线程进行处理。

        适用于:连接数目多且比较长(重操作)的架构,比如相册服务器,充分调用 OS 参与并发操作。
 

  • 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
发出的红包

打赏作者

快乐的小三菊

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

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

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

打赏作者

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

抵扣说明:

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

余额充值