- BIO:阻塞IO
- NIO:非阻塞IO
- 同步IO
- 异步IO
那么什么是阻塞IO、非阻塞IO、同步IO、异步IO呢?
一个IO操作其实分成了两个步骤:发起IO请求和实际的IO操作
- 阻塞IO和非阻塞IO的区别在于第一步:发起IO请求是否会被阻塞,如果阻塞直到完成那么就是传统的阻塞IO;如果不阻塞,那么就是非阻塞IO。
- 同步IO和异步IO的区别就在于第二个步骤是否阻塞,如果实际的IO读写阻塞请求进程,那么就是同步IO,因此阻塞IO、非阻塞IO、IO复用、信号驱动IO都是同步IO;如果不阻塞,而是操作系统帮你做完IO操作再将结果返回给你,那么就是异步IO。
举个生活中的例子:
打电话给手机充值
- 你拨打10086——客户端与服务器建立连接。
- 人工服务接通了你的电话——连接建立。
- 你说"我现在可以充值吗?"——发送消息。
- 说完人工客服去查询你的账单,你等待人工回复,那么这就是阻塞IO。
- 如果你放下电话,开上免提,然后处理其他事情了,一会儿你问她,查好了吗---那这就是非阻塞IO。
- 如果人工客服说:"查好了,现在正在给您充值"——这就是同步IO。
- 如果人工客服说:"查好了,稍后给您充值,请您十五分钟查看",然后挂了电话——这就是异步IO。