【问题标题】:Does .NET make use of concurrency or parallelism or both? [closed].NET 是否使用并发性或并行性或两者兼而有之? [关闭]
【发布时间】:2021-01-01 03:31:50
【问题描述】:

我知道并行和并发之间的区别。并发意味着处理器以非常快的速度在线程之间切换,这使得它看起来像是在并行运行,因此即使使用单核处理器,您也可以实现同时发生的事情。而并行性意味着每个线程都在不同的内核上运行。

.NET 使用并行还是并发?什么是流量? cpu 是否检查线程是否多于内核,如果是这样,是否会导致内核具有多个线程,从而使程序并行和并发?

如果我使用任务并行库会发生什么?名字是平行的,是平行还是两者的结合?

这个主题对我来说不是很清楚,我一直在怀疑,不知道这一切是如何运作的。

【问题讨论】:

  • 您在哪里阅读了并行性和并发性的定义?
  • 您对 C# 有多少经验?你用过异步/等待吗?你用过Task.Run吗?
  • 基本上并行是并发的一个子集(任何并行的东西也是并发的,但有些东西可以并发而不是并行的)
  • @mjwills 我对 C# 有一些经验,是的。我也知道如何使用 async/await。但我想真正了解幕后发生的事情。我也使用过Task.Run。它根据我的理解创建了一个线程,任务调度程序完成其余的工作。

标签: c# multithreading concurrency parallel-processing threadpool


【解决方案1】:

您对并发与并行的定义有些奇怪。更好的定义可能来自How to articulate the difference between asynchronous and parallel programming

当您异步运行某事时,这意味着它是非阻塞的,您无需等待它完成即可执行它并继续执行其他操作。并行意味着同时并行运行多个事物。当您可以将任务分成独立的工作部分时,并行性很有效。

您可以与 .Net 并行运行,最简单的方法是使用 Parallel.For

.Net 还允许使用异步函数。 .Net API 中的大多数异步函数应该映射到操作系统中的异步函数(在 Windows 上,这有时称为重叠 IO)。这允许处理器在等待慢速磁盘或网络数据包时执行其他操作。使用异步函数的现代方法是使用 async/await

在使用并行或异步编程时,不能保证任何东西都会同时运行或以任何特定顺序运行,这取决于操作系统和/或框架。在大多数情况下,这将运行与逻辑处理器一样多的线程。我建议阅读 Parallel Processing, Concurrency, and Async Programming in .NET 以了解该主题的介绍。

【讨论】:

  • 感谢您的帮助。但是不能保证某些东西会并行运行,对吗?当我创建两个线程时,调度程序将决定哪个处理器运行正确?
  • @M Yil 是的,这将取决于调度程序和它将运行的机器。但在大多数情况下,线程实际上是并行运行的。但是您需要学习线程安全编程技术才能安全地使用这两个概念。
猜你喜欢
  • 1970-01-01
  • 2011-10-27
  • 2015-10-25
  • 1970-01-01
  • 2016-01-31
  • 2011-06-17
  • 2015-10-14
  • 2017-12-28
  • 1970-01-01
相关资源
最近更新 更多