我正在维护一个高性能的CSV解析器,并试图最大限度地利用最新技术来提高吞吐量。对于此特定任务,这意味着:
Nehalem闪存(我们拥有相对便宜的PCIExpress卡,1 TB的存储,可达到1 GB/s的持续读取performance)
CSV解析器的第一个实现是单线程的。文件读取,字符解码,字段分割,文本解析,所有这些都在同一个线程中。其结果是吞吐量约为50MB/s。不错,但远低于存储限制……
第二个实现使用一个线程读取文件(在字节级别),一个线程解码字符(从ByteBuffer到CharBuffer),使用多个线程解析字段(我指的是将分隔的文本字段解析为双精度、整数、日期...)。这个速度更快,在我们的机器上接近400MB/s。
但仍远低于我们的存储性能。这些SSD在未来会再次改善,我们不会在Java中发挥最大的作用。很明显,当前的限制是字符解码( CharsetDecoder.read(...) )。这就是瓶颈,在功能强大的Nehalem处理器上,它以400MB/s的速度将字节转换为字符,非常好,但这必须是单线程的。CharsetDecoder是有状态的,这取决于所使用的字符集,并且不支持多线程解码。
所以我向社区提出的问题是(感谢你到目前为止阅读了这篇文章):有人知道如何在Java中并行化字符集解码操作吗?
https://stackoverflow.com/questions/3438466
复制相似问题