IO 是什么
IO 全称为 Input/Output ,翻译过来就是 输入/输出。
计算机角度的 IO
我们日常所说的输入输出,比较直观的意思就是计算机的输入/输出,计算机就是主体。
在计算机当中我们可以分为 5 个部分:运算器、控制器、存储器、输入十本、输出设备。
输入设备是向计算机输入数据和信息的设备,键盘,鼠标都是属于输入设备;
输出设备是向计算机硬件系统的终端设备,用于接收计算机数据的输出显示。像显示器、打印机就都是属于输出设备。
操作系统角度的 IO
我们要将内存中的数据写入到磁盘的话,那么主体就是一个程序。
操作系统就是负责计算机的资源管理和进程的调度,我们电脑运行着的应用程序,其实是需要经过操作系统,才能做出一些特殊的操作,如磁盘文件的读写,内存的读写等等。
真正的 IO 是在操作系统上执行的。即当前程序的 IO 操作分为两种动作:IO 调用和 IO 执行。IO 调用是由进程(应用程序的运行态)发起的,而 IO 执行是操作系统内核的工作。
而应用程序发起的一次 IO 操作是包含了两个阶段的:
IO 调用:应用程序进程向操作系统内核发起调用。
IO 执行:操作系统内核完成 IO 操作。
I/O模型
阻塞 IO
假设应用程序的进程发起 IO 调用,但是如果内核的数据还没有准备好的话,那么应用程序进程就一直在阻塞等待,一直等到内核数据准备好了,从内核拷贝到用户空间,才返回成功提示,此次 IO 操作,就称呼为 阻塞 I/O;
阻塞 I/O 比较经典的应用就是 阻塞 socket,Java BIO。
优点:开发简单,容易入门;在阻塞等待期间,用户线程挂起,在挂起期间是不会占用 CPU 资源的。
缺点:一个线程维护一个 IO,是不适合大并发,在并发