在互联网中提起网络,我们都会避免不了讨论高并发、百万连接。而此处的百万连接的实现,脱离不了网络IO的选择,因此惊脉互联网求职为大家进行记录一下整个网络IO的发展演变过程。
网络 IO(输入 / 输出)在计算机网络的发展历程中经历了显著的演变。
在这种模型下,程序在进行 IO 操作(如读取网络数据)时会被阻塞,即暂停执行直到 IO 操作完成。这就像一个人在等待信件,必须一直守在邮箱旁边,直到信到来才能做其他事。这种方式简单直接,但效率很低,因为在等待 IO 的过程中,CPU 资源被闲置浪费。
它允许程序在发起 IO 操作后,不必等待操作完成就可以继续执行其他任务。就好像可以一边做别的事,一边偶尔查看一下邮箱有没有信件。不过,这需要程序不断地轮询检查 IO 操作是否完成,增加了程序的复杂性。
它可以同时监视多个 IO 通道,比如一个服务器能够同时监听多个客户端连接的读写事件。这就好比一个邮递员可以同时查看多个邮箱,当有信件到达时能及时处理,大大提高了资源利用率和处理能力。像 select、poll 和 epoll(在 Linux 系统下)这些机制就是典型代表,其中 epoll 在处理大量并发连接时性能优势明显。
当 IO 操作完成后,操作系统会通知应用程序,这如同请了一个专业的秘书帮忙收信,收到后再通知自己,让程序能够更加专注于业务逻辑的处理,是网络 IO 发展的一个高级阶段,能够高效地处理高并发的网络任务。