从C
程序开始,Linux上的I / O系统调用开销有多大,我的意思是运行有多糟糕,例如,在大型缓冲区(在常规文件或networking套接字上) read / write
操作相比,有很多小的read / write
操作? 应用程序是强multithreading的。
系统调用在大多数现代机器上至少需要1-2微秒来处理系统调用的开销 ,如果他们做了任何可能阻塞或睡眠的复杂事情, 系统调用会花费更多的时间。 IO至少需要20微秒,最高可达毫秒量级。 将它与一个微小的函数调用或者宏从一个用户空间缓冲区中读取一个字节进行比较,这个字节很可能在几纳秒内完成(可能在糟糕的一天是200纳秒)。
你可以自己测量一下。 只需打开/dev/zero
,在测量时间的同时进行一些读写操作。 还可以改变每次调用的字节数 – 例如1个字节,2个字节,128个字节,… 4096个字节。 还要注意使用read(2)
和write(2)
系统调用,而不是使用内部缓冲区的任何东西。