多个线程可以同时将数据写入一个文件吗?
2022-09-01 07:40:21
如果您曾经使用过p2p下载软件,他们可以下载具有多线程的文件,并且他们只创建了一个文件,所以我想知道线程如何将数据写入该文件。按顺序还是并行?
想象一下,您想将一个大数据库表转储到一个文件中,以及如何使这项工作更快?
如果您曾经使用过p2p下载软件,他们可以下载具有多线程的文件,并且他们只创建了一个文件,所以我想知道线程如何将数据写入该文件。按顺序还是并行?
想象一下,您想将一个大数据库表转储到一个文件中,以及如何使这项工作更快?
您可以使用多个线程将 a 写入文件,例如日志文件。但是您必须按照@Thilo指出的那样协调线程。要么您需要同步文件访问并仅写入整个记录/行,要么需要有一个策略将文件区域分配给不同的线程,例如,重新构建具有已知偏移量和大小的文件。
出于性能原因,很少这样做,因为大多数磁盘子系统在按顺序写入时性能最佳,而磁盘 IO 是瓶颈。如果CPU创建记录或文本行(或网络IO)是它可以提供帮助的瓶颈。
要将大型数据库表转储到文件的图像,以及如何使此作业更快?
按顺序编写它可能是最快的。
Java nio包被设计为允许这样做。例如,看看 http://docs.oracle.com/javase/1.5.0/docs/api/java/nio/channels/FileChannel.html。
您可以将一个文件的多个区域映射到不同的缓冲区,每个缓冲区可以由单独的线程单独填充。