同步和异步,阻塞和非阻塞
2016-04-13 16:03
155 查看
在前不久的蘑菇街的面试中问了我Log4j的异步调用的优点,我没有答得很全。这里详细分析一下。
在这个定义之下,我们的绝大多数的代码都是同步执行,比如函数调用时必须等待函数流程执行完毕然后返回给调用者。
简单一点来说就是当我们去服装店买东西的时候,如果你喜欢的那件衣服缺货了,但是你又不想等,你可以喊老板到货就call你,所以你可以干自己的事,无需等待。
这里需要声明的是同步和阻塞不是等同的,同步调用很多时候线程不会挂起,但是阻塞会挂起线程。
异步阻塞 异步非阻塞
同步阻塞:
效率最低,专心在服装店等待服装什么都不做。
异步阻塞:
类似我们吃饭喊号一样,不能离开饭店,明显被卡在了等待上面。
同步非阻塞:
效率低下,类似我们一边打电话一边抬头看队伍排到了没有,我们需要在这两个之间来回切换。
异步非阻塞:
类似一种预定,更高级的吃饭喊号,如果你是VIP老板有位置了直接打电话给你(注册回调函数),而你不需要自己一直在饭店。
AIO 背后的基本思想是允许进程发起很多 I/O 操作,而不用阻塞或等待任何操作完成。
稍后或在接收到 I/O 操作完成的通知时,进程就可以检索 I/O 操作的结果。
同步和异步
1.什么是同步?
同步:指发送一个请求,需要等待返回。然后才能够发送下一个请求。在这个定义之下,我们的绝大多数的代码都是同步执行,比如函数调用时必须等待函数流程执行完毕然后返回给调用者。
2.什么是异步?
异步:简单点不是同步的都是异步。官方定义是发出一个异步过程调用后,调用者不会立刻得到结果。实际处理这个调用的部件是在调用发出之后,通过回调函数处理,或者通过状态通知。简单一点来说就是当我们去服装店买东西的时候,如果你喜欢的那件衣服缺货了,但是你又不想等,你可以喊老板到货就call你,所以你可以干自己的事,无需等待。
阻塞与非阻塞
1.什么是阻塞?
阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回。这里需要声明的是同步和阻塞不是等同的,同步调用很多时候线程不会挂起,但是阻塞会挂起线程。
2.什么是非阻塞
在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。两两组队
同步阻塞 同步非阻塞异步阻塞 异步非阻塞
同步阻塞:
效率最低,专心在服装店等待服装什么都不做。
异步阻塞:
类似我们吃饭喊号一样,不能离开饭店,明显被卡在了等待上面。
同步非阻塞:
效率低下,类似我们一边打电话一边抬头看队伍排到了没有,我们需要在这两个之间来回切换。
异步非阻塞:
类似一种预定,更高级的吃饭喊号,如果你是VIP老板有位置了直接打电话给你(注册回调函数),而你不需要自己一直在饭店。
AIO?
Linux 异步 I/O 是 Linux 内核中提供的一个相当新的增强。它是 2.6 版本内核的一个标准特性,但是我们在 2.4 版本内核的补丁中也可以找到它。AIO 背后的基本思想是允许进程发起很多 I/O 操作,而不用阻塞或等待任何操作完成。
稍后或在接收到 I/O 操作完成的通知时,进程就可以检索 I/O 操作的结果。
相关文章推荐
- IOS 核心动画之CAKeyframeAnimation - iBaby
- tableView一些细节问题用于开发
- 给Git初学者学习的建议
- 总结sublime text3安装package control插件的方法
- 未能加载文件或程序集“Autofac, Version=3.4.0.0,
- 贪吃蛇小游戏(含详细思路及源代码)
- 团队项目计划backlog
- django定期执行任务
- org 使用 toc
- CentOS 7 搭建 Docker 环境
- 芒果iOS开发之AFNetworking3.0.4使用指南
- ORA-28000: the account is locked
- Android之Button自定义点击效果
- arm汇编指令bne、beq和tst
- 加入收藏 设为首页代码收藏本页的代码和收藏本站的代码设为首页代码
- 【笔记本】第一阶段工作完成
- 为人之气
- 序列化注意事项
- bindService使用示例及问题说明
- hive文件存储格式