03.并发 IO

并发 IO

IO 的概念,从字义来理解就是输入输出。操作系统从上层到底层,各个层次之间均存在 IO。比如,CPU 有 IO,内存有 IO, VMM 有 IO, 底层磁盘上也有 IO,这是广义上的 IO。通常来讲,一个上层的 IO 可能会产生针对磁盘的多个 IO,也就是说,上层的 IO 是稀疏的,下层的 IO 是密集的。

所谓的并发 IO,即在一个时间片内,如果一个进程进行一个 IO 操作,例如读个文件,这个时候该进程可以把自己标记为休眠状态并出让 CPU 的使用权,待文件读进内存,操作系统会把这个休眠的进程唤醒,唤醒后的进程就有机会重新获得 CPU 的使用权了。这里的进程在等待 IO 时之所以会释放 CPU 使用权,是为了让 CPU 在这段等待时间里可以做别的事情,这样一来 CPU 的使用率就上来了;此外,如果这时有另外一个进程也读文件,读文件的操作就会排队,磁盘驱动在完成一个进程的读操作后,发现有排队的任务,就会立即启动下一个读操作,这样 IO 的使用率也上来了。

典型的场景就是 Nginx 这样的反向代理服务器,Redis 这样的数据库以及各种 RPC 框架;它们的共通点就是会有大量的并发请求,并且每个请求都可能消耗一定的逻辑处理时间。