gpt4 book ai didi

java - Avro 序列化 : which parts are and aren't thread-safe?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:50:34 24 4
gpt4 key购买 nike

我在网上的不同地方看到了一些关于此的相互矛盾的信息,因此希望真正知道的人提供权威的回答。

假设,我正在将一些东西序列化为 avro:

    class StuffToAvro {
private final Schema schema;
StuffToAvro(Schema schema) { this.schema = schema }

void apply(GenericRecord stuff, OutputStream out) {
final Encoder encoder = EncoderFactory.get.binaryEncoder(out, null);
final GenericDatumWriter writer = new GenericDatumWriter(schema);
writer.write(stuff, encoder):
}
}

问题是我是否可以/应该通过重用编码器和编写器来优化它,如果应该的话,正确的方法是什么:我可以直接初始化编写器并使其成为final 例如,还是它需要是 ThreadLocal

关于编码器的类似问题:我应该记住之前的实例并将其传递给 getBinaryEncoder 以重用,还是也需要是 ThreadLocal

在每种情况下,如果答案是ThreadLocal,我还想知道这样的优化是否值得复杂性:每次创建一个全新的编写器和/或编码器是否真的很昂贵时间而不是重复使用它们?

另外,我假设,无论我在这里得到什么答案,也适用于阅读/解码。是吗?

感谢任何指点。

谢谢!

最佳答案

根据这个post

Yes, a DatumReader instance may be used in multiple threads. Encoder and Decoder are not thread-safe, but DatumReader and DatumWriter are.

Writer 也是线程安全的。

Yes, re-using a single GenericDatumWriter to write multiple objects should improve performance.

关于java - Avro 序列化 : which parts are and aren't thread-safe?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43760686/

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