c - 是否可以从多个线程写入同一文件的不同部分?

标签 c io disk-io

我可以从多个线程(在典型的 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 甚至可能适得其反。

就加速而言,有几种途径可供探索:

  1. 减少 I/O 量(例如,通过采用需要较少 I/O 的排序算法,或通过在内存中完成更多工作);
  2. 提高 I/O 吞吐量,例如使用更快的驱动器。

关于c - 是否可以从多个线程写入同一文件的不同部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15477925/

相关文章:

c - 在 OS X 上加载表面时 SDL2 预乘 alpha channel ?

java - 如何检查文件是否可以删除?

java - 为什么此转换不会返回正确的方法? (以弗软件)

c# - UNC 路径不适用于 .NET?

c# - C# 中用于读取 FAT32 的低级 C++ 样式 i/o

mysql - 在 MySQL 中,I/O 延迟会导致简单的 UPDATE 花费几秒钟吗?

c - 这两种具有结构的 typedef 实现是否等效?

c双指针数组

c - .C() 返回一个空列表

java - 如何检查文件是否存在于 Java 中?