Microsoft .NET 4.0 为其框架引入了新的“并行增强功能”。我想知道使用标准 System.Threading 函数与新的并行增强功能创建应用程序之间有什么区别。
并行扩展和常规线程之间最重要的区别可能是控制流。
一个线程,使用创建new Thread(...)
or ThreadPool.QueueUserWorkItem
将在完全不确定的时间点终止。如果你写这段代码:
ThreadPool.QueueUserWorkItem(() =>
{
Thread.Sleep(1000);
Console.WriteLine("Work Finished");
});
Console.WriteLine("Item Queued");
文本Item Queued
将立即出现,并且Work Finished
将在大约 1 秒延迟后打印。
另一方面,如果您使用并行扩展编写类似的内容:
Parallel.For(0, 10, i =>
{
Thread.Sleep(1000);
Console.WriteLine("Test {0}", i);
});
Console.WriteLine("Finished");
在这种情况下,您将看到在发生任何事情之前延迟 1 秒,然后以随机顺序出现一系列“测试”消息,并且then文本Finished
.
换句话说,并行运行任务实际上并不会改变程序流程。它将在不同的线程上运行不同的任务,以便它们可以在多个CPU核心上执行,以提高程序的整体吞吐量,但对于典型的程序员而言,这些任务并不是真正在“后台运行” “就像他们用一根线一样。您无需更改程序的结构或执行任何特殊操作即可在工作完成时收到通知。你无法控制发生的事情inside并行块,但您确实知道该块在所有并行任务完成之前不会返回控制权。
尽管并行扩展对此非常有用,但值得一提的是,当您实际使用时,PX 毫无用处。need在后台运行任务,例如实施调度程序,或委托给工作线程以保持 UI 响应。您仍然需要为此使用线程或异步组件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)