有一个有趣的问题:
在Linux或unix中的read
、write
等函数很多时候被称为“不带缓冲的I/O”,他们执行的过程中真的不经过缓冲吗?
其实所有的磁盘I/O都要经过内核的块缓冲区(也称为内核的缓冲区高速缓存)。既然read
或write
的数据都要被内核缓冲,那么术语“不带缓冲的I/O”实际上指的是在用户进程中对这两个函数不会自动缓冲,每次read
或write
都会进行一次系统调用。
有一个有趣的问题:
在Linux或unix中的read
、write
等函数很多时候被称为“不带缓冲的I/O”,他们执行的过程中真的不经过缓冲吗?
其实所有的磁盘I/O都要经过内核的块缓冲区(也称为内核的缓冲区高速缓存)。既然read
或write
的数据都要被内核缓冲,那么术语“不带缓冲的I/O”实际上指的是在用户进程中对这两个函数不会自动缓冲,每次read
或write
都会进行一次系统调用。