多个线程可以同时将数据写入文件吗?

Cai*_*der 31 java concurrency file-io multithreading

如果你曾经使用过p2p下载软件,他们可以下载一个带有多线程的文件,而且他们只创建了一个文件,所以我想知道线程如何将数据写入该文件.顺序还是并行?

想象一下,您想要将大型数据库表转储到文件中,以及如何更快地完成这项工作?

Pet*_*rey 21

您可以使用多个线程将文件写入文件,例如日志文件.但是你必须像@Thilo指出的那样协调你的主题.您需要同步文件访问权限并且只编写整个记录/行,或者您需要有一个策略来将文件的区域分配给不同的线程,例如重新构建具有已知偏移量和大小的文件.

由于性能原因很少这样做,因为大多数磁盘子系统在顺序写入时性能最佳,而磁盘IO是瓶颈.如果CPU创建记录或文本行(或网络IO)是它可以帮助的瓶颈.

要将大型数据库表转储到文件的图像,以及如何更快地完成此工作?

按顺序编写可能是最快的.


WeM*_*are 18

Java nio包旨在允许这样做.请查看http://docs.oracle.com/javase/1.5.0/docs/api/java/nio/channels/FileChannel.html上的示例.

您可以将一个文件的多个区域映射到不同的缓冲区,每个缓冲区可以由单独的线程单独填充.

  • +1如果有人想用Java实现这个"p2p下载软件",这似乎是一个很好的API. (3认同)