我不是在询问使用后台工作者或线程池或TPL的最惯用方式。
我正在尝试找出使用.NET将数据从一个线程传递到另一个线程时最快的方法
我目前正在使用带有写入索引和读取索引的环形缓冲区。 这样,除了更新读/写索引的原子操作外,我根本没有任何线程同步。 (我不是100%肯定,但读取和整数上的++在.NET中是原子的,对吗?或者当一个线程读取它时,整数会被覆盖一半吗?)
Write Index
V
index 0 [_][_][_][_][_][_][_][_][_][_][_] --> higher index
^
Read Index
这是线程到线程通信的合理方法吗?
我没有将它用于任何真实的项目,我只是希望更好地掌握哪些有效,哪些无效。
[编辑] 好吧,我想要公开羞辱:
https://gist.github.com/rogeralsing/8121376
该代码中有多少个洞?
答案 0 :(得分:2)
我认为这取决于你如何定义“最快”和“线程之间”。
我认为ConcurrentBag<T>
是一种非常好的方式。如果我没记错的话,实现使用某种链表来减少大多数锁的范围,使其变得更具可扩展性。
2个简单的线程之间是否快?您需要检查,但它会利用您的核心,因此整个应用程序将运行得很快。