将数据分成块,然后确保线程安全

时间:2012-08-12 08:58:57

标签: c# multithreading task-parallel-library plinq

我正在编写一些基本上从套接字接收数据的代码,执行反序列化然后传递给我的应用程序。反序列化的对象可以按其id分组(在反序列化过程中生成id)。

为了提高我的应用程序的性能,我想使用C#4.0附带的新并行功能。我唯一的约束是2个线程无法访问具有相同id的对象。现在我知道我可以在同步对象上执行lock(),这个同步对象将被放置在对象内但我想避免这些锁(这里的性能是个问题)。

我想过的设计:

  1. 创建某种分区程序,它将按ID分割数据(这将确保我将获得的每个缓冲区将始终具有相同的对象ID组)。
  2. 使用PLINQ的TPL
  3. 分配线程

    有人可以建议我这样做吗?

1 个答案:

答案 0 :(得分:1)

在开发多个处理器或内核时,我建议PLINQ

  

PLINQ是一个查询执行引擎,它接受任何LINQ到对象或LINQ到XML查询,并在可用时自动利用多个处理器或内核执行。编程模型的变化很小,这意味着您不需要成为并发大师就可以使用它。事实上,线程和锁定甚至不会出现,除非你真的想深入了解它是如何工作的。 PLINQ是Parallel FX的关键组件,它是Microsoft®.NETFramework中的下一代并发支持。

This涵盖:

  • 从LINQ到PLINQ
  • PLINQ编程模型
  • 处理查询输出
  • 并发例外
  • 订购输出结果
  • 副作用
  • 让PLINQ投入使用

Parallel LINQ (PLINQ)