【问题标题】:Multi-thread serialization in C#C#中的多线程序列化
【发布时间】:2011-01-19 21:23:02
【问题描述】:

问题: 我有大量大消息要序列化并通过网络发送。 我想最大化性能,所以我正在考虑创建多个线程用于消息序列化和一个线程用于发送数据。想法是根据网络性能动态确定序列化的线程数。如果数据发送速度快且序列化是瓶颈,请添加更多线程以提高序列化速度。如果网络很慢,请使用较少的线程,如果发送缓冲区已满,则完全停止。

任何想法如何做到这一点?

决定是否需要更多或更少线程的最佳算法是什么?

如何正确连接多个线程的序列化结果?

请回答以下任何问题?谢谢

【问题讨论】:

  • 您提到性能是一个问题 - 这并不是线程问题的直接答案,但我很想知道您当前使用的是哪个序列化程序......特别是,我正在考虑使用 protobuf-net(免费 - 但披露:我编写了它),它比任何内置序列化程序都快得多(CPU)和更小(IO/带宽)。
  • 我现在正在使用 BinaryFormatter。我计划打开protobuf。任何估计,V2 何时可以投入生产?
  • 好吧,对于主 .NET 框架上的大多数常见场景,主干是稳定的。我不能承诺一个具体的日期,因为我还有其他(非编码)承诺。而且:v1 也非常强大......

标签: c# serialization network-programming threadpool


【解决方案1】:

它可以被视为生产者/消费者问题,在 Fx4 中您可以使用 BlockingCollection。

但坦率地说,我希望(网络)I/O 成为瓶颈,而不是序列化。你将不得不测量。

【讨论】:

    【解决方案2】:

    您可以将数据分块成数据包并将数据包放入队列中。查看网络性能的进程将查看队列并决定发送多少数据包。此实现的缺点是您需要在接收端组装数据包,这些数据包可能无法以正确的顺序接收。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-14
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多