c# – .NET在开发多线程应用程序和并行编程之间有什么区别?
最近我已经阅读了很多关于.NET中的并行编程的内容,但我仍然对这个主题的文本中的语句相矛盾.
例如,弹出(将鼠标指向标签的图标时)stackoverflow.com task-parallel-library tag的描述:
这是否意味着使用早期版本的.NET无法实现多核d和并行编程应用程序? 我是否在.NET多线程应用程序中控制核心之间的多核/并行使用/分配? 如何识别要运行线程的核心并将线程归属到特定核心? 什么启用了.NET 4.0+ Task Parallel Library在以前版本的.NET中无法做到? 更新: .NET在开发多线程应用程序和并行编程之间有什么区别? 到目前为止,我无法理解它们之间的区别 UPDATE2:
您是否可以提示如何在.NET4之前(在.NET3.5中)专门创建并行代码,同时考虑到我熟悉多线程开发? 解决方法
我认为“多线程”就像术语所说的那样:使用多线程.
“并行处理”将是:在多个线程之间拆分一组工作,以便可以并行处理工作. 因此,并行处理是多线程的一种特殊情况.
一点也不.你可以使用Thread类来完成它.写起来要困难得多,而且要难以理解.
不是真的,但你不需要.您可以为应用程序处理器处理器关联性,但在.NET级别,这几乎不是一个成功的策略. 任务并行库包括一个“分区器”概念,可用于控制工作分配,这是一种更好的解决方案,可以控制线程在核心上的分布.
你不应该这样做. .NET线程不一定与OS线程对应;你处于比这更高的抽象层次.现在,默认的.NET主机确实将线程1对1映射,因此如果您想依赖于未记录的实现细节,那么您可以查看抽象并使用P / invoke来确定/驱动您的处理器关联.但如上所述,它没用.
没有.但它确实使并行处理(和多线程)变得更加容易!
首先,没有理由为该平台开发.没有. .NET 4.5已经发布,最后一个版本(.NET 4.0)支持下一个旧版本(.NET 3.5)所做的所有操作系统. 但是如果你真的想要,可以通过旋转Thread对象或BackgroundWorkers,或者通过将工作直接排队到线程池来进行简单的并行处理.所有这些方法都需要比TPL中的Task类型更多的代码(特别是在错误处理方面). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |