首页 > 代码库 > 同步和异步
同步和异步
同步和异步的区别
同步、异步、阻塞、非阻塞,是分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
来源:知乎
同步和异步
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。