gpt4 book ai didi

Java - 使用多个线程读取/写入内存映射缓冲区(MappedByteBuffer)

转载 作者:行者123 更新时间:2023-12-02 10:51:09 25 4
gpt4 key购买 nike

我有一个应用程序,其中发生大量文件 I/O(读取和写入)。我知道使用多个线程执行文件 I/O 并不是一个好的解决方案,因为它会降低性能(我无法控制所使用的磁盘类型)。因此,我最终将一个线程专门用于所有文件 I/O。MappedByteBuffer 对我的情况有什么用吗?我知道 MappedByteBuffer 是由操作系统映射到文件的内存区域,我可以利用多个线程在不同的内存映射缓冲区上高效地执行 I/O 操作吗?当多个线程将不同文件映射到不同内存缓冲区时,磁盘头寻道时间仍然重要吗?在这种情况下能否保证一致性?对于此类情况有可用的基准结果吗?提前谢谢大家。

最佳答案

Can MappedByteBuffer be of any use in my case?

引用JavaDoc与 ByteBuffer 相比,MappedByteBuffer 不会给您带来任何性能优势。您甚至可能会在运行时发生一些意外的更改

The content of a mapped byte buffer can change at any time, for example if the content of the corresponding region of the mapped file is changed by this program or another.

<小时/>

I know that MappedByteBuffer is a memory area which is mapped to a file by the OS, can I leverage multiple threads to do I/O operations on different memory mapped buffers efficiently?

除非您比操作系统或虚拟机更了解如何有效地读写数据,否则情况并非如此。

<小时/>

Does disk head seek times still matter when multiple threads are mapping different files to different memory buffers?

头部仍然需要寻找它的位置。除非你有不同的磁盘并且只进行磁盘 IO,否则拥有多个线程是没有用的。如果您有一些冗余读取数据,多线程应该很有用,因为您的操作系统将缓存“热”数据。

<小时/>

Is consistency guaranteed in such cases?

不太确定你的意思,但你必须确保访问你的 ByteBuffer 以某种方式同步,因为它不是线程安全的数据结构。

<小时/>

Are there any benchmark results available for such cases?

去年,我使用多个缓冲区进行了某种基准测试。长话短说,这实际上取决于用例、操作系统和硬件。根据这有多重要,我建议您进行自己的基准测试。我记得的唯一不变的是,在写入磁盘段大小的数据 block 时,您可以获得最佳性能...这在某种程度上是显而易见的;-)

关于Java - 使用多个线程读取/写入内存映射缓冲区(MappedByteBuffer),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26691561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com