.NET 是不是使用并发性或并行性或两者兼而有之? [关闭]

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

您在哪里阅读了并行性和并发性的定义? 您对 C# 有多少经验?你用过异步/等待吗?你用过Task.Run吗? 这可能很有趣:***.com/a/1050257/10608418 基本上并行是并发的一个子集(任何并行的东西也是并发的,但有些东西可以并发而不是并行的) @mjwills 我对 C# 有一些经验,是的。我也知道如何使用 async/await。但我想真正了解幕后发生的事情。我也使用过Task.Run。它根据我的理解创建了一个线程,任务调度程序完成其余的工作。 【参考方案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 是的,这将取决于调度程序和它将运行的机器。但在大多数情况下,线程实际上是并行运行的。但是您需要学习线程安全编程技术才能安全地使用这两个概念。

以上是关于.NET 是不是使用并发性或并行性或两者兼而有之? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

UIPageViewController 可访问性或画外音

通过单应性或solvePnP()函数估计相机位姿

CSS 可见性或显示?

Golang 可见性或 CPU 线程缓存问题

在不破坏可访问性或 PDF 标签的情况下连接 PDF

Web API Fetch() 是并行的还是异步的?