我可以从多个线程(在典型的 PC 上)同时写入同一文件的不同部分吗?我的意思是只有一个磁盘头,所以写入只能按某种顺序执行,即不能并行,对吧?
编辑:
我正在编写一个对大型二进制文件进行排序的程序,但大部分时间仍花费在磁盘 I/O 上,所以我只是想知道通过并行执行 I/O 是否可以获得额外的速度。
最佳答案
没有什么可以阻止您让多个线程写入同一文件的不同部分。
I have a program that sorts a large binary file but the majority of time is still spent on disk I/O, so I'm just wondering will I gain any extra speed by doing I/O in parallel.
如果程序是磁盘绑定(bind)的,使其成为多线程(并且仍然将相同数量的数据写入同一磁盘)不会加快速度。
如果我们谈论的是传统硬盘驱动器,顺序 I/O 通常比涉及来回移动磁头的 I/O 更快。考虑到这一点,跨线程拆分 I/O 甚至可能适得其反。
就加速而言,有几种途径可供探索:
- 减少 I/O 量(例如,通过采用需要较少 I/O 的排序算法,或通过在内存中完成更多工作);
- 提高 I/O 吞吐量,例如使用更快的驱动器。
关于c - 是否可以从多个线程写入同一文件的不同部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15477925/