同步、异步、阻塞、非阻塞的区别

1. 同步

同步和异步关注的是消息通信机制。所谓同步就是,系统发出一个调用,在没有得到结果之前该调用是不会返回的,一直会等到该调用得到返回值。如果一个调用很快返回,就一定是得到了返回。就是调用者会主动等待这个调用的结果。举个例子:今天老师上课问学习委员今天作业交齐了没有,学习委员立马检查后就给老师说,交齐了;如果学习委员没有改老师答案,老师会一直等学习委员给他回复。

例如:普通B/S模式:提交请求->等待服务器处理->处理完毕返回,这个期间客户端浏览去不能干任何事情,所有的操作都完成,才能返回给用户。这样用户等待的时间太长,给用户一种卡死的感觉。这种情况,用户不能关闭界面,如果关闭了,程序就中断了。

2. 异步

异步和同步相反,异步则是在系统发出一个调用之后,调用就直接返回,所以它没有返回结果。换句话说就是当一个调用执行之后,调用者不会立马得到结果,而是等待被调用者有结果之后在通知它。还拿交作业举例:老师问作业交齐了没有,数好了告诉我。老师继续上课,下课后学习委员才告诉老师结果。

例如:ajax请求:请求通过事件触发->服务器处理(这时候浏览器仍然可以做其他的事情)->处理完毕。用户将请求队列放入消息队列,并反馈给用户,系统迁移程序已经启动,你可以关闭浏览器了。然后程序在慢慢的去写入数据库。这就是异步,单用户没有卡死的感觉,会告诉你,你的请求系统已经相应了,你可以关闭界面了。

3.阻塞

阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态。阻塞是指方法(函数)执行后,在结果返回之前,当线程(进程)会被挂起。调用线程(进程0)只有在得到结果之后才会返回。

4.非阻塞

非阻塞方法(函数)指在不能立即达到结果之前,该方法(函数)不会阻塞当前线程,可以立即返回,只是返回结果失败,没有数据,一般需要cpu周期轮询,以检查数据是否就绪。

总结

1.同步,就是调用方调用一个功能,该功能没有完成前,调用方死等结果

2.异步,就是调用方调用一个功能,不需要直到该功能结果,被调用方有结果后会通知调用方

3.阻塞,就是调用函数,函数没有得到结果前,函数不会返回

4.非阻塞,就是调用函数,函数立即返回,通过select通知调用者

同步IO和异步IO的区别就在于:数据拷贝的时候是否阻塞

阻塞IO和非阻塞IO的区别就在于:应用程序的调用是否立即返回

同步和阻塞的区别:对于同步调用来说,很多时候当前线程还是激活的,只是从逻辑上当前函数没有返回,它还会抢占cpu,也会主动监测IO是否准备好。

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

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

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值