Alice52 / java-ocean

java-tutorial .We intend to explain Java knowledge in this repository.
MIT License
0 stars 0 forks source link

[javase] IO #1

Closed Alice52 closed 5 years ago

Alice52 commented 5 years ago

同步和异步说的是消息的通知机制,阻塞非阻塞说的是线程的状态


IO

IO[BIO/Block IO]

  1. 同步阻塞 IO:

NIO[No-Block IO]: nio 同步非堵塞式io 选择器多路复用轮询channel

  1. 同步非阻塞IO

AIO: aio异步非堵塞式io不是多路复用 是回调

  1. netty

Socket

  1. TCP
  2. UDP

conclusion

  1. the relation of buffer, channel, selector, pipe

    • 用于源节点与目标节点的连接. 在 Java NIO 中负责缓冲区中数据的传输. Channel 本身不存储数据(类似于铁路), 因此要配合缓冲区使用(火车)

    • 所有的数据都是使用 Buffer 在 Channel 中传输的

    • Selector 是源资源与目标资源之间建立一个机制, 当准备工作什么的都做好了, 才会连接目标资源成为 Channel

      Selection_081

    • Pipe 是一个管道, Channel 为其中的一个个路线,, 且每个 Channel 都是单方向的

    avatar


IO 分类

  1. 磁盘 IO: 由于 SSD 的普及, 这里的优化空间再收缩
    • async
  2. 内存 IO
  3. 网络 IO: 异步处理
    • 发送数据: 同步发送就可以了, 没有必要异步: 想将数据缓存, 通过网卡将缓存中的数据发送
    • 接受数据: 需要有一个线程一直阻塞, 直到有数据时, 写入缓存, 然后给接收数据的线程发一个通知, 线程收到通知后结束等待, 开始读取数据: 周而复始; 大量线程时就 频繁切换 CPU ...

IO 模型

  1. 阻塞IO模型: 同步IO

  2. 非阻塞IO模型: 同步IO

  3. IO复用模型: 同步IO

  4. 信号驱动的IO模型: 同步IO

  5. 异步IO模型:异步IO


Reference

  1. https://www.zhihu.com/question/19732473
  2. https://www.zhihu.com/question/27991975
Alice52 commented 3 years ago

https://mp.weixin.qq.com/s?__biz=MzU3MDAzNDg1MA==&mid=2247489873&idx=2&sn=a2f7f940375c692c71bcc04061cb235c