Microsoft .NET 4.0在其框架中引入了新的“并行增强”。我想知道做一个使用标准System.Threading函数的应用程序与新的并行增强程序之间有什么区别。线程与并行处理
线程与并行处理
回答
Parallel Extensions和常规线程之间最重要的区别可能是控制流。
使用new Thread(...)
或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秒的延迟发生任何事情之前,那么“测试”的转换消息按随机顺序排列,然后然后文本Finished
。
换句话说,并行运行任务实际上并不改变程序流程。它将在不同的线程上运行不同的任务,以便它们可以在多个CPU内核上执行,以提高程序的整体吞吐量,但就典型程序员而言,这些任务并不真正运行在“后台“因为他们会用线程。您不必改变程序的结构,或者在工作完成时做任何特殊的事情来通知。您无法控制里面会发生什么情况,但您确实知道该块在所有并行任务完成之前不会返回控制权。
虽然并行扩展是为这个伟大的,它承担提的是,PX是没有用的,任何当你真正需要在后台运行一个任务,如实施调度,或委托给工作线程,以保持UI响应。您仍然需要为这些使用线程或异步组件。
这里有一个很好的Channel9的我看了关于这一主题而回:http://channel9.msdn.com/posts/philpenn/Parallel-Programming-with-NET-Parallel-Extensions/
嗨,亚当,这个链接不适合我,说没有找到页面,任何其他有用的链接 – 2016-02-08 10:18:38
并行处理仅仅是自动创建线程一些花哨的界面。对大多数任务使用并行处理扩展比较容易。
并行框架使用.NET线程模型,下面依次构建Windows线程模型。但是,在通用框架中已经完成了很多优化,以使并行库更高效。
This blog有额外的细节。
- 1. 并行处理Python线程
- 2. C++线程 - 并行处理
- 3. 如何分别处理Kafka分区并与Spark执行程序并行处理?
- 4. 线程处理
- 5. 线程处理
- 6. 处理线程
- 7. 与线程,处理程序和信息处理:“重新启动”线程
- 8. 并行与线程 - 性能
- 9. 线程运行中的处理程序
- 10. 线程的执行处理程序
- 11. 如何准备线程进行处理,并更改正在处理的数据?
- 12. 并行处理
- 13. 春季并发处理多个队列与单线程池
- 14. 线程与异步图像处理?
- 15. 如何处理与线程退出
- 16. 并行处理定时器的事件与主线程在asp.net c#
- 17. 多线程处理
- 18. Java线程处理
- 19. 多线程处理?
- 20. 并行处理VS串行处理
- 21. 实现线程安全的,并行处理
- 22. 用pthreads对Box2D进行线程处理
- 23. 使用Kinect进行线程处理
- 24. 在PHP中执行线程处理
- 25. 与ActiveMQ并行处理多条消息
- 26. JMS与JPPF(Java并行处理)框架
- 27. 并行下载与多处理和PySftp
- 28. Loopers - 处理程序 - 线程
- 29. 消息处理,与工作线程的意外行为
- 30. 与多处理并行处理慢于顺序
也当你等待任务,你等待所有的子任务不像线程。错误handerling对于任务和线程来说要好得多。 – 2010-03-02 16:45:23