在线程之间传递数据的最快方法

时间:2013-12-24 11:55:42

标签: .net multithreading task-parallel-library disruptor-pattern

我不是在询问使用后台工作者或线程池或TPL的最惯用方式。

我正在尝试找出使用.NET将数据从一个线程传递到另一个线程时最快的方法

我目前正在使用带有写入索引和读取索引的环形缓冲区。 这样,除了更新读/写索引的原子操作外,我根本没有任何线程同步。 (我不是100%肯定,但读取和整数上的++在.NET中是原子的,对吗?或者当一个线程读取它时,整数会被覆盖一半吗?)

                         Write Index
                              V
index 0 [_][_][_][_][_][_][_][_][_][_][_] --> higher index
               ^
           Read Index

这是线程到线程通信的合理方法吗?

我没有将它用于任何真实的项目,我只是希望更好地掌握哪些有效,哪些无效。

[编辑] 好吧,我想要公开羞辱:

https://gist.github.com/rogeralsing/8121376

该代码中有多少个洞?

1 个答案:

答案 0 :(得分:2)

我认为这取决于你如何定义“最快”和“线程之间”。 我认为ConcurrentBag<T>是一种非常好的方式。如果我没记错的话,实现使用某种链表来减少大多数锁的范围,使其变得更具可扩展性。 2个简单的线程之间是否快?您需要检查,但它会利用您的核心,因此整个应用程序将运行得很快。