java 5种IO模型

每日一句
You cannot swim for new horizons until you have courage to lose sight of the shore. 除非有勇气离开岸边,否则你永远游不到彼岸。

概念
IO 是主存和外部设备(硬盘、终端和网络等)拷贝数据的过程。IO是操作系统的底层功能实现,底层通过I/O指令进行完成。

以下是5种类Unix下可用的I/O模型

  1. 阻塞式I/O:Blocking IO

  2. 非阻塞式I/O:nonblocking IO

  3. I/O 复用(Select,poll epoll):IO multiplexing

  4. 信号驱动式I/O(SIGIO):signal driven IO

  5. 异步 I/O(posix 的 aio 系列函数):asynchromous IO

Blocking IO
在 Linux 中,默认情况下所有的 socket 都是 Blocking,一个典型的读操作流程大概是这样:

  1. 通常涉及等待数据从网络到达。当所有等待数据到达时,它被复制到内核中的某个缓冲区

  2. 把数据从内核缓冲区复制到应用程序缓冲区

当用户进程调用了 recvfrom 这个系统调用, kernel 就开始了 IO 的第一个阶段:准备数据。对于 network IO 来说,很多时候数据在一开始还没有到达(比如,还没有收到一个完整的 UDP 包)。这个时候 kernel 就要等待足够的数据到来。而在用户进程这边࿰

上一篇:大厂面试真题详解:在大数组中查找


下一篇:Python如何搜索模块