我有一个C程序在循环中执行“填充”,其中每次迭代都定时到某个赫兹。这个循环过去能够以大约80kh的速度运行。
然后我在循环中添加了一些文件I / O(读取/写入linux文件描述符),现在似乎我无法打破~6k循环/秒。操作本身非常便宜,所以我怀疑它是某种内核上下文切换导致一堆延迟。所以,有两个问题:
答案 0 :(得分:0)
写入tmpfile()而不是写入磁盘。看看性能是否有所改善在一个不错的实现中,它应该保存在内存中,直到它变得非常庞大。 如果这可以解决您的问题,那么它的写入延迟会降低您的速度。如果你一次性刷新整个tmp文件,你可能会看到一些改进。将缓冲区设置为巨大值将产生相同的效果。
答案 1 :(得分:0)
我将回答我自己的问题,因为有一个非常直接的解决方案,只需很少的代码修改。
如果我们执行大量文件描述符读/写操作会减慢我们的程序,我们可以考虑使用mmap()
将文件描述符直接映射到内存,然后基本上将文件视为字节数组。只需确保分配足够的内存以适合您想要写的任何内容。