UNIX系统下的I/O模型有5种:同步阻塞I/O、同步非阻塞I/O、I/O多路复用、信号驱动I/O和异步I/O。
什么是I/O?为什么需要这些I/O模型?
- 所谓的I/O就是计算机内存与外部设备之间拷贝数据的过程I/O就是计算机内存与外部设备之间拷贝数据的过程。我们知道CPU访问内存的速度远远高于外部设备,因此CPU是先把外部设备的数据读到内存里,然后再进行处理。请考虑一下这个场景,当你的程序通过CPU向外部设备发出一个读指令时,数据从外部设备拷贝到内存往往需要一段时间,这个时候CPU没事干了,你的程序是主动把CPU让给别人?还是让CPU不停地查:数据到了吗、数据到了吗?
- 这就是I/O模型要解决的问题。
当用户线程发起I/O操作后,网络数据读取操作会经历两个步骤:
- 当用户线程发起I/O操作后,网络数据读取操作会经历两个步骤
- 内核将数据从内核空间拷贝到用户空间
各种I/O模型的区别就是:它们实现这两个步骤的方式是不一样的。