我一直在MSDN上阅读有关C#Concurrent Collections的this文章。它讨论了用于特定场景的最佳线程,以便从集合中获得最大收益,例如:
当一个专用线程正在排队且一个专用线程正在排队时,ConcurrentQueue表现最佳。如果您不强制执行此规则,那么在具有多个核心的计算机上,Queue的执行速度甚至可能比ConcurrentQueue快一些。
当使用Tasks而不是原始线程时,此建议是否仍然有效?根据我对C#Tasks的理解(有限),不能保证特定的任务总是在上下文切换之间的同一个线程上运行,或者保持堆栈框架是否意味着相同的规则适用于最佳使用方式?
感谢。
答案 0 :(得分:0)
一个任务总是在同一个线程上运行。 TPL是一个用户模式库。用户模式没有(实际)方法将执行代码从线程迁移到线程。也没有必要这样做。
这个建议完全适用于任务,就像它对线程一样。
这条建议意味着什么是同时应该只有一个生产者和一个消费者。只要他们不竞争就可以有100个线程不时入队。
(我不会在这里质疑这个建议,因为这个问题超出了这个问题的范围。但这就是“这里的意思。”