c# – .NET在开发多线程应用程序和并行编程之间有什么区别?

前端之家收集整理的这篇文章主要介绍了c# – .NET在开发多线程应用程序和并行编程之间有什么区别?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
最近我已经阅读了很多关于.NET中的并行编程的内容,但我仍然对这个主题的文本中的语句相矛盾.

例如,弹出(将鼠标指向标签的图标时)stackoverflow.com task-parallel-library tag的描述:

“The Task Parallel Library is part of .NET 4. It is a set of APIs tpo
enable developers to program multi-core shared memory processors”

这是否意味着使用早期版本的.NET无法实现多核d和并行编程应用程序?

我是否在.NET多线程应用程序中控制核心之间的多核/并行使用/分配?

如何识别要运行线程的核心并将线程归属到特定核心?

什么启用了.NET 4.0+ Task Parallel Library在以前版本的.NET中无法做到?

更新:
嗯,很难提出具体的问题,但我想更好地理解:

.NET在开发多线程应用程序和并行编程之间有什么区别?

到目前为止,我无法理解它们之间的区别

UPDATE2:
MSDN “Parallel Programming in the .NET Framework”从.NET 4.0版本开始,其文章Task Parallel Library告诉:

“Starting with the .NET Framework 4,the TPL is the preferred way to
write multithreaded and parallel code”

您是否可以提示如何在.NET4之前(在.NET3.5中)专门创建并行代码,同时考虑到我熟悉多线程开发?

解决方法

我认为“多线程”就像术语所说的那样:使用多线程.

“并行处理”将是:在多个线程之间拆分一组工作,以便可以并行处理工作.

因此,并行处理是多线程的一种特殊情况.

Does this mean that multi-core-d and parallel programming applications impossible using prior versions of .NET?

一点也不.你可以使用Thread类来完成它.写起来要困难得多,而且要难以理解.

Do I control a multicore/parallel usage/ditribution between cores in .NET multithreaded application?

不是真的,但你不需要.您可以为应用程序处理器处理器关联性,但在.NET级别,这几乎不是一个成功的策略.

任务并行库包括一个“分区器”概念,可用于控制工作分配,这是一种更好的解决方案,可以控制线程在核心上的分布.

How can I identify a core on which a thread to be run and attribute a thread to a specific core?

你不应该这样做. .NET线程不一定与OS线程对应;你处于比这更高的抽象层次.现在,默认的.NET主机确实将线程1对1映射,因此如果您想依赖于未记录的实现细节,那么您可以查看抽象并使用P / invoke来确定/驱动您的处理器关联.但如上所述,它没用.

What has the .NET 4.0+ Task Parallel Library enabled that was impossible to do in prevIoUs versions of .NET?

没有.但它确实使并行处理(和多线程)变得更加容易!

Can you give me hints how to specifically create parallel code in pre-.NET4 (in .NET3.5),taking into account that I am familiar with multi-threading development?

首先,没有理由为该平台开发.没有. .NET 4.5已经发布,最后一个版本(.NET 4.0)支持下一个旧版本(.NET 3.5)所做的所有操作系统.

但是如果你真的想要,可以通过旋转Thread对象或BackgroundWorkers,或者通过将工作直接排队到线程池来进行简单的并行处理.所有这些方法都需要比TPL中的Task类型更多的代码(特别是在错误处理方面).

猜你在找的C#相关文章