来自C
程序的Linux上的I / O系统调用开销有多大,我的意思是运行有多糟糕,例如:与大型缓冲区(常规文件或网络套接字)上的read / write
相比,有许多小read / write
次操作?应用程序是强多线程的。
答案 0 :(得分:15)
Syscalls在大多数现代机器上只需要1-2微秒仅用于系统调用开销,如果他们正在做任何可能阻塞或睡眠的复杂事件,则需要更多时间。预计IO至少需要20微秒,最高可达毫秒级。将此与一个从用户空间缓冲区读取字节的微小函数调用或宏进行比较,这可能在几纳秒内完成(在糟糕的一天可能达到200 ns)。
答案 1 :(得分:3)
您可以自己测量一下。只需打开/dev/zero
并在测量时间时进行一些阅读和书写。还会改变您在每次通话中输入的字节数 - 例如1个字节,2个字节,128个字节,... 4096bytes。另外注意使用read(2)
和write(2)
系统调用,而不是使用内部缓冲区。