C# NET是利用并发还是并行,还是两者兼而有之?

C# NET是利用并发还是并行,还是两者兼而有之?,c#,multithreading,concurrency,parallel-processing,threadpool,C#,Multithreading,Concurrency,Parallel Processing,Threadpool,我知道并行和并发之间的区别。并发意味着处理器以非常快的速度在线程之间切换,这使它看起来像是并行运行的,因此即使使用单核处理器,您也可以同时完成任务。而并行性意味着每个线程运行在不同的内核上 NET使用并行还是concurreny?流程是什么?cpu是否检查线程是否多于内核,如果是这种情况,它将导致内核具有多个线程,从而使程序并行和并发 如果我使用任务并行库会发生什么?这个名字在里面是平行的,那么它是平行的还是两者的结合呢 我对这个问题不是很清楚,我一直在怀疑,也不知道这一切是怎么回事。你对并发与

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

NET使用并行还是concurreny?流程是什么?cpu是否检查线程是否多于内核,如果是这种情况,它将导致内核具有多个线程,从而使程序并行和并发

如果我使用任务并行库会发生什么?这个名字在里面是平行的,那么它是平行的还是两者的结合呢


我对这个问题不是很清楚,我一直在怀疑,也不知道这一切是怎么回事。

你对并发与并行的定义有些奇怪。更好的定义可能来自

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

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

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


在使用并行或异步编程时,不能保证任何东西都将并发运行或以任何特定顺序运行,这取决于操作系统和/或框架。在大多数情况下,这将运行与逻辑处理器数量相同的线程。我建议您阅读本主题的介绍。

您在哪里读过并行和并发的定义?您对C有多少经验?您使用过异步/等待吗?您使用过Task.Run吗?这可能很有趣:基本上,并行性是并发性的一个子集。任何并行的东西都是并发的,但某些东西可以是并发的,而不需要被同步parallel@mjwills我对C有一些经验是的。我还知道如何使用async/await。但我想真正了解引擎盖下发生了什么。我还使用了Task.Run。据我所知,它创建了一个线程,剩下的由任务调度器完成。谢谢你的帮助。但也不能保证某些东西会并行运行,对吗?当我创建两个线程时,调度程序将决定中的哪个处理器将正常运行?@M Yil是的,它将取决于调度程序及其运行的机器。但在大多数情况下,线程实际上是并行运行的。但是为了安全地使用这两个概念,您需要学习线程安全编程技术。