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

1、同步

所谓同步,就是发出一个功能调用时,在没有得到结果之前,该调用就不返回或继续执行后续操作。 简单来说,同步就是必须一件一件事做,等前一件做完了才能做下一件事。 例如:B/S模式中的表单提交,具体过程是:客户端提交请求->等待服务器处理->处理完毕返回,在这个过程中客户端(浏览器)不能做其他事。

2、异步

异步与同步相对,当一个异步过程调用发出后,调用者在没有得到结果之前,就可以继续执行后续操作。当这个调用完成后,一般通过状态、通知和回调来通知调用者。对于异步调用,调用的返回并不受调用者控制。 同步阻塞:小明一直盯着下载进度条,到 100% 的时候就完成。 - 同步体现在:等待下载完成通知。 - 阻塞体现在:等待下载完成通知过程中,不能做其他任务处理。

3、阻塞与非阻塞

阻塞和非阻塞这两个概念与程序(线程)等待消息通知(无所谓同步或者异步)时的状态有关。也就是说阻塞与非阻塞主要是程序(线程)等待消息通知时的状态角度来说的。

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

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

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

区别

同步阻塞:小明一直盯着下载进度条,到 100% 的时候就完成。 - 同步体现在:等待下载完成通知。 - 阻塞体现在:等待下载完成通知过程中,不能做其他任务处理。

同步非阻塞:小明提交下载任务后就去干别的,每过一段时间就去瞄一眼进度条,看到 100% 就完成。 - 同步体现在:等待下载完成通知。 - 非阻塞体现在:等待下载完成通知过程中,去干别的任务了,只是时不时会瞄一眼进度条。【小明必须要在两个任务间切换,关注下载进度】

异步阻塞:小明换了个有下载完成通知功能的软件,下载完成就“叮”一声。不过小明不做别的事,仍然一直等待“叮”的声音。 - 异步体现在:下载完成“叮”一声通知。 - 阻塞体现在:等待下载完成“叮”一声通知过程中,不能做其他任务处理。

异步非阻塞:仍然是那个会“叮”一声的下载软件,小明提交下载任务后就去干别的,听到“叮”的一声就知道完成了。 - 异步体现在:下载完成“叮”一声通知。 - 非阻塞体现在:等待下载完成“叮”一声通知过程中,去干别的任务了,只需要接收“叮”声通知即可。【软件处理下载任务,小明处理其他任务,不需关注进度,只需接收软件“叮”声通知,即可】

全部评论

相关推荐

头像
05-12 09:14
点赞 评论 收藏
转发
点赞 1 评论
分享
牛客网
牛客企业服务