对同步、异步、阻塞、非阻塞的简单理解

本文深入解析了同步与异步、阻塞与非阻塞的概念及其区别,通过生动的例子帮助读者理解这些计算机科学中的核心概念。同步与异步关注消息通信机制,阻塞与非阻塞关注程序等待调用结果的状态。
摘要由CSDN通过智能技术生成

         同步:就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回,也就是必须一件一件事做,等前一件事做完了才能做下一件事。例如普通的B/S模式:提交请求→等待服务器处理→处理完毕返回,这个过程中,客户端浏览器不能干任何事。通俗来讲就是,我调用一个功能,该功能没有结束前,我死等结果。

 

         异步:当一个功能调用后,调用者不能立即得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。例如ajax请求:请求触发→服务器处理(在服务器处理过程中浏览器可以做其他事情)→处理完毕。通俗理解就是,我调用一个功能,不需要知道该功能的结果,当该功能有结果时再通知我。

 

         同步与异步关注的是消息通信机制。同步就是由调用者主动等待这个调用的结果。同步IO操作会导致请求进程阻塞,直到IO操作完成;而异步IO操作不会导致请求进程阻塞。

 

         阻塞:阻塞调用是指调用结果返回之前,当前线程会被挂起(线程进入非可执行状态,在这个状态下,CPU不会给线程分配时间片,即线程暂停运行),函数只有在得到结果之后才会返回。其实阻塞调用和同步调用是完全不同的,对于同步调用来说,很多时候当前线程还是激活的,只是从逻辑上当前函数没有返回,它还会去抢占CPU去执行其他逻辑,也会主动检测IO操作是否准备好。通俗理解就是,调用函数,当函数没有接收完数据或者没有得到结果之前,函数不会返回。

 

         非阻塞:在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。通俗理解就是,调用函数,函数立即返回,之后通过select()通知函数的调用者。

 

         总结:同步IO和异步IO的区别就在于数据复制的时候进程是否阻塞,阻塞的为同步IO,没有阻塞的为异步IO;阻塞IO和非阻塞IO的区别在于应用程序的调用是否立即返回,立即返回的为非阻塞IO。

 

         阻塞和非阻塞关注的是程序在等待调用结果时的状态。

 

         关于同步与异步、阻塞与非阻塞更形象的说明:

         背景:老张爱喝茶,他泡茶用的水由两把水壶烧开,一把普通水壶,一把响水壶(水烧开后会有提示音)。

         1.老张把普通水壶放到火上,立等水开,此为同步阻塞。

         2.老张把水壶放到火上,让水先慢慢烧着,自己去客厅看电视,时不时地去看水烧开了没有,此为同步非阻塞。

         3.老张把响水壶放到火上,立等水开,此为异步阻塞。

         4.老张把响水壶放到火上,去客厅看电视,水壶响之前不再去观察水是否烧开,等到水壶响之后再去拿壶,此为异步非阻塞。

         关于同步异步,只是对于水壶而言,普通水壶,同步,响水壶,异步。关于阻塞非阻塞,仅对于老张而言,立等水开的老张,阻塞,看电视听到水壶提示音的老张,非阻塞。由以上例子可知,一般情况下,异步与非阻塞配合使用,这样才能发挥异步的作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值