在深入复杂的 I/O 模型之前,我们必须先理解操作系统为我们准备的几块“基石”。

一切的起点是 文件描述符 (File Descriptor)。在 Linux “一切皆文件”的思想下,无论是磁盘上的文档还是网络上的连接,在进程眼中都只是一个代表编号的整数。

当我们需要跨越网络进行通信时,这个编号就演变成了 套接字 (Socket)。它像是一个插座,定义了通信的端点和协议。

而要真正让数据在用户程序和硬件之间流动,就必须通过 I/O 系统调用。这是用户态穿越到内核态的唯一合法通道,每一次 readwrite,都是一次跨越边界的旅程。