同步和异步
Posted alan-alan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了同步和异步相关的知识,希望对你有一定的参考价值。
同步和异步的区别
同步、异步、阻塞、非阻塞,是分3个层次的:
CPU层次;
线程层次;
程序员感知层次。
这几个概念之所以容易混淆,是因为没有分清楚是在哪个层次进行讨论。
CPU层次
- 在CPU层次,或者说操作系统进行IO和任务调度的层次,
- 现代操作系统通常使用异步非阻塞方式进行IO,
- 即发出IO请求之后,并不等待IO操作完成,而是继续执行下面的指令(非阻塞),IO操作和CPU指令互不干扰(异步),
- 最后通过中断的方式来通知IO操作完成结果。
线程层次
- 多线程(同步阻塞);
- 同步线程:即两个线程步调要一致,要相互协商,阻塞是为了等待
- IO多路复用(select,poll,epoll)(同步非阻塞,严格地来讲,是把阻塞点改变了位置);
- 直接暴露出异步的IO接口,如kernel-aio和IOCP(异步非阻塞)。
- 异步线程:步调不用一致,各自按各自的步调运行,不受另一个线程的影响。
程序员感知层次
- 如python的asyncio库中,就通过协程,提供了同步阻塞式的API;
- 如node.js中,就通过回调函数,提供了异步非阻塞式的API。
普通感知层次
普通B/S模式(同步)AJAX技术(异步)
- 同步调用就是调用一但返回,就能知道结果,
- 而异步是返回时不一定知道结果,还得通过其他机制来获知结果,如:状态,通知,回调
通信层次
- 同步通信是指:发送方和接收方通过一定机制,实现收发步调协调
- 异步通信是指:发送方的发送不管接收方的接收状态,接收方主动通知
- 同步+非阻塞:发送方和接收方通过一定机制,发送主动check
作者:银月游侠
链接:https://www.zhihu.com/question/19732473/answer/88599695
来源:知乎
以上是关于同步和异步的主要内容,如果未能解决你的问题,请参考以下文章