我正在Linux中开发一个应用程序,它只包括从多个线程写入文件。目前,我从每个线程获取一个互斥锁,然后追加到一个文件中。我想优化我的应用程序的性能,并考虑创建多个文件(让我们调用段),然后每个线程只需写到它自己的段。此文件类似于预先写日志,仅在应用程序引导期间使用。
我想知道上面是否是优化IO的好策略。
是否存在为同一本地磁盘上的写入创建多个文件的开销?
发布于 2021-12-23 12:39:39
来自man 2 write:
根据POSIX.1-2008/SUSv4 4节XSI 2.9.7 (“与常规文件操作的线程交互”):下列所有功能在POSIX.1-2008在常规文件或符号链接上操作时,都应是原子的:随后列出的API包括写()和写(2)。文件偏移量的更新应该是跨线程(和进程)的原子效应。但是,在3.14版本之前的Linux上,情况并非如此:如果共享打开的文件描述的两个进程(请参阅open(2))同时执行写(或写)操作,那么I/O操作在更新文件偏移量方面不是原子操作,因此两个进程输出的数据块可能(不正确)重叠。这个问题在Linux3.14中得到了解决。
换句话说,如果这只是一个进程中的多个线程,那么如果您的内核>3.14,那么就没有问题;这与实际的文件系统无关。
https://unix.stackexchange.com/questions/683633
复制相似问题