我听说.NET 4团队在框架中添加了新的类,使线程处理更好、更容易。
基本上,问题是运行.NET 4中添加的多线程任务的新方法是什么,它们被设计用来做什么?
UPD:只是想说明一下,我并不是在.NET 4中寻找一种运行并行任务的方法,我想知道哪些是新添加的任务,如果可能的话,每个任务最适合哪种情况。
发布于 2010-04-25 11:40:37
由于缺乏答复,我决定用我学到的答案来评价下面的答案。正如@Scott所指出的,.NET 4添加了任务并行库,它为并行性增加了许多创新、新方法和方法。
Parallel.For和Parallel.ForEach方法,它们允许开发人员在多个线程中处理多个项。在这种情况下,框架将决定需要多少线程,何时创建新线程,何时不创建。
这是一种非常简单和简单的方法来并行处理现有代码,并增加一些性能提升。.Where子句过滤对象列表,例如,现在将在多个线程中运行!Task类。在某些方面,它可能看起来像已经众所周知的Thread类,但是它利用了.NET 4中的新线程池(与以前的版本相比,它已经有了很大的改进),并且比普通的Thread类更有功能。例如,您可以链接任务,在这些任务中,链中间的任务只有在前面的任务完成时才会开始。第九频道屏幕上的示例及深入说明BlockingCollection<>。在有生产者-消费者场景的情况下,这是非常有效的。您可以有多个线程生成一些对象,然后由使用者方法使用和处理这些对象。这可以很容易地与任务工厂和阻塞集合并行和控制。有用的屏幕显示和第九频道的例子
它们还可以使用不同的备份存储类(ConcurrentQueue、ConcurentStack、ConcurrentBag),它们都是线程安全的,并且在元素排序和性能方面也不同。在不同的视频在这里中它们的示例和解释CountdownEvent类,它可以在“任务协调场景”(c)中帮助我们。基本上,我们可以等待所有并行任务完成。第九频道上示例用法的屏幕显示您可以在9频道上看到一些带有“并行计算”标记的屏幕和视频
发布于 2010-04-24 13:25:14
是的,.NET 4添加了任务并行库,在较高级别上增加了对以下内容的支持:
Parallel.For和Parallel.ForEach运行并行循环Parallel.Invoke或Task类创建或运行任务回答原来问题的更新..。
TPL是使用.NET 4编写并行任务的首选方法,您仍然可以自己创建线程池项,并执行以前可以使用的所有“手动”线程处理技术。要记住的是,为了利用TPL,已经重写了整个线程池(以及几乎所有与线程相关的内容)。这意味着,即使您自己创建了一个线程池项,您仍然可以使用TPL,即使您不知道它。要记住的另一件事是,TPL的优化程度要高得多,并且将根据可用处理器的数量进行更适当的扩展。
至于他们中的每一个人最适合哪种情况,没有“银弹”的答案。如果您以前排队排队自己的线程池项(或者做其他多线程的事情),您可以修改代码的这一部分以使用TPL,而不会产生任何后果。
对于并行循环或并行查询,您需要分析代码和代码的执行,以确定是否适合并行化。
发布于 2010-04-29 10:22:46
严格地说,这是C# 4.0,不是一个新的类,而是events 现在有一种更聪明的锁定形式,如果我正确理解了这个更改,就消除了对锁定代码的reems的需求,如下所示(从乔恩·斯基特的这篇文章中摘取):
SomeEventHandler someEvent;
readonly object someEventLock = new object();
public event SomeEventHandler SomeEvent
{
add
{
lock (someEventLock)
{
someEvent += value;
}
}
remove
{
lock (someEventLock)
{
someEvent -= value;
}
}
}https://stackoverflow.com/questions/2704583
复制相似问题