跳到主要内容
版本:0.16

线程安全

Apache Fory™ C# 提供了两种运行时形态,对应不同的线程模型保证。

Fory(单线程运行时)

Fory 针对单线程复用做了优化,不能被多个线程并发使用。

Fory fory = Fory.Builder().Build();

如果你显式管理线程亲和性,应为每个线程分配一个 Fory 实例。

ThreadSafeFory(并发封装)

ThreadSafeFory 为每个线程封装一个 Fory 实例,并暴露线程安全 API。

using Apache.Fory;

using ThreadSafeFory fory = Fory.Builder()
.Compatible(true)
.TrackRef(true)
.BuildThreadSafe();

fory.Register<MyType>(100);

Parallel.For(0, 64, i =>
{
byte[] payload = fory.Serialize(i);
int decoded = fory.Deserialize<int>(payload);
});

注册行为

  • ThreadSafeFory.Register(...) 会集中保存注册信息。
  • 已存在的线程运行时会被同步更新。
  • 新线程会自动获得之前所有注册项。

释放

ThreadSafeFory 实现了 IDisposable,在不再需要时应主动释放。

using ThreadSafeFory fory = Fory.Builder().BuildThreadSafe();

相关主题