引用

https://developer.aliyun.com/article/726698

IO流即输入流和输出流

BIO(blocking-io)同步阻塞
数据的读(写)在一个线程内,当暂不可用时阻塞等待。

NIO(non-blocking-io)同步非阻塞
线程轮询IO是否就绪,当不可用时结束等待(去做其他事),一定时间后再询问。JAVA NIO(new io)指的是一个线程访问轮询访问一堆是否就绪。

AIO(synchronnous-non-blocking-IO)异步非阻塞
线程发出请求后不等待,而是当缓冲区就绪后,通知线程或者执行线程交给予的回调函数(又被称为new io 2.0)

同步和异步(先搬后改)

同步优点:

  1. 同步流程对结果处理通常更为简单,可以就近处理。
  2. 同步流程对结果的处理始终和前文保持在一个上下文内。
  3. 同步流程可以很容易捕获、处理异常。
  4. 同步流程是最天然的控制过程顺序执行的方式。

异步优点:

  1. 异步流程可以立即给调用方返回初步的结果。
  2. 异步流程可以延迟给调用方最终的结果数据,在此期间可以做更多额外的工作,例如结果记录等等。
  3. 异步流程在执行的过程中,可以释放占用的线程等资源,避免阻塞,等到结果产生再重新获取线程处理。
  4. 异步流程可以等多次调用的结果出来后,再统一返回一次结果集合,提高响应效率

什么时候使用异步

  1. 不涉及共享资源,或对共享资源只读,即非互斥操作
  2. 没有时序上的严格关系
  3. 不需要原子操作,或可以通过其他方式控制原子性
  4. 常用于IO操作等耗时操作,因为比较影响客户体验和使用性能
  5. 不影响主线程逻辑
    剩余自然是同步QWQ

非阻塞目前理论上是要优于阻塞的,但非阻塞更麻烦一点,在文件传输这种少链接多质量的时候可以考虑。

JAVA BIO

新线程处理客户端读写

线程池处理客户端读写

NIO

AIO

Q.E.D.


在线