Ton*_*Nam 2 c# parallel-processing multithreading thread-priority
我试图通过让一个线程写入链表而另一个线程处理链表来加快速度.
出于某种原因,如果写入链表的方法我将其作为一个任务,并且从链表中读取一个低优先级线程的方法,程序整体上完成的速度要快得多.换句话说,我在做的时候经历了紧固结果:
Task.Factory.StartNew( AddItems );
new Thread( startProcessingItems ) { Priority = ThreadPriority.Lowest }.Start();
while(completed==false)
Thread.Sleep(0);
Run Code Online (Sandbox Code Playgroud)
也许是因为第一个任务是做了比其他线程更多的额外工作,这就是为什么如果我将第二个方法设置为低优先级,整个事情将会更快完成.
无论如何,现在我的问题是startProcessingItems ThreadPriority =最低的运行.我怎么能把它的优先级改为最高?如果我在该方法中创建一个新任务,它将以低优先级运行吗?基本上,startProcessingItems以列表结束,一旦它具有该列表,我将开始以最高优先级执行.
这不是一个好方法.首先,LinkedList<T>它不是线程安全的,所以写入它并在两个线程中读取它将导致竞争条件.
更好的方法是使用BlockingCollection<T>.这允许您添加项目(生产者线程)和读取项目(消费者线程),而不必担心线程安全,因为它完全是线程安全的.
读取线程可以只调用blockingCollection.GetConsumingEnumerable()a foreach来获取元素,而写入线程只是添加它们.读取线程将自动阻塞,因此不需要弄乱优先级.
当写入线程"完成"时,您只需调用CompleteAdding,这将允许读取线程自动完成.
| 归档时间: |
|
| 查看次数: |
4323 次 |
| 最近记录: |