阻塞/非阻塞/异步/同步
来源:互联网 发布:备份通讯录的软件 编辑:程序博客网 时间:2024/05/29 04:43
最近去面试,面试让我描述JAVA IO的三种方式:阻塞,非阻塞,异步。当时我有点儿懵了,异步怎么和阻塞,非阻塞并列了。阻塞和非阻塞是一组相对的概念,异步是和同步相对的概念。
同步
所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。按照这个定义,其实绝大多数函数都是同步调用。
异步
异步的概念和同步相对。当一个异步过程调用发出后,调用者不用等待得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。
阻塞
阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回。很多人会把阻塞和同步混淆,实际上它们是不同的。对于同步调用来说,很多时候当前线程还是active的,只是当前函数没有返回而已。例如,我们在CSocket中调用Receive函数,如果缓冲区中没有数据,这个函数就会一直等待,直到有数据才返回。而此时,当前线程还会继续处理各种各样的消息。如果主窗口和调用函数在同一个线程中,除非你在特殊的界面操作函数中调用,其实主界面还是应该可以刷新。socket接收数据的另外一个函数recv则是一个阻塞调用的例子。当socket工作在阻塞模式的时候,如果没有数据的情况下调用该函数,则当前线程就会被挂起,直到有数据为止。
非阻塞
非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。
同步/异步是下, API 通知被调用者的通知方式。阻塞/非阻塞则是 API 调用者的等待方式。
在不同的场景下,同步/异步、阻塞/非阻塞的四种组合都有应用。
同步阻塞
同步阻塞是最简单的方式,常见的调用一个函数并等待其返回。
同步非阻塞
同步非阻塞就是 发出调用请求后,每隔一段时间查询一下执行进度的 的轮询(polling)方式。
异步非阻塞
异步非阻塞,就是把一件事丢到 “后台” 去做,完成之后再通知。
异步阻塞
被调用者异步通知,但是调用者还是不放心,要盯着一直等到返回。这种看上去很傻的方式主要在某些API只提供异步通知的场合,但是业务逻辑又要求阻塞,做完一件事才能再做另外一件事。
0 0
- 同步阻塞, 同步非阻塞,异步阻塞,异步非阻塞
- 同步、异步、阻塞、非阻塞
- 同步,异步,阻塞,非阻塞
- 同步 异步 阻塞 非阻塞
- 同步,异步,阻塞,非阻塞
- 阻塞,非阻塞,异步,同步
- 同步 异步 阻塞 非阻塞
- 同步 异步 阻塞 非阻塞
- 同步 异步 阻塞 非阻塞
- 同步异步 阻塞非阻塞
- 同步 异步 阻塞 非阻塞
- 同步、异步,阻塞、非阻塞
- 阻塞 非阻塞 同步 /异步
- 同步/异步 阻塞/非阻塞
- 同步 异步 阻塞 非阻塞
- 同步异步 阻塞非阻塞
- 同步 异步 阻塞 非阻塞
- 同步/异步 阻塞/非阻塞 .
- 深入分析AIL语言及init.rc文件
- TreeView1鼠标点击节点触发的单击事件
- 欢迎使用CSDN-markdown编辑器
- VC++获取串口设备信息,CPU ID,硬盘ID,网卡MAC等机器硬件信息,用于加密
- C#xml操作帮助类
- 阻塞/非阻塞/异步/同步
- PCL入门
- 设计模式:适配器模式|菜鸟教程
- Android RecyclerView之ListView显示(二)
- 大数据时代,您的个人信息真的安全吗?
- linux -- CPU
- C#mysql操作类
- 文件系统:FAT12
- 重启Leetcode模式,在无尽的Google Team Match中重生