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上的示例.
您可以将一个文件的多个区域映射到不同的缓冲区,每个缓冲区可以由单独的线程单独填充.