c#中异步和并行编程之间的关系是什么?

我感到困惑,因为异步编程是一种异步执行代码块的方法,它调用方法而不等待结果。 同样,并行编程是一种同时执行多个任务的方法,但所有这些任务都是异步执行的。 所以想知道/混淆c#中这两种编程范式之间的关系是什么。

并行编程是一种我们使用多个线程更快地执行任务的技术。 这意味着在现代多核架构上,我们可以利用更多可用资源来执行任务。

一个很好的例子是使用quicksort对列表进行排序。

通常,并行编程性能很重要,所有线程都在努力实现共同目标。

异步编程略有不同。 这通常涉及更长时间运行的任务和任务,这些任务和任务可能正在等待某种外部刺激。 一个很好的例子是在后台线程中执行大型计算,以便UI保持响应。 对于异步代码,我们通常会讨论以与主应用程序不同的速率执行的代码。

并行编程意味着执行操作同时使用多个线程,处理cpu和/或内核。

您所说的异步编程意味着触发请求并提供回调机制来接收响应。

通常,异步意味着在可能的情况下执行,并行意味着通过创建新的执行线程立即执行。
这里的链接

最后:

使用CPU密集型解决方案的并行编程 。 使用IO Bound解决方案的异步编程

并行编程主要关注提高系统的性能。

异步编程主要关注提高系统的响应能力。

线程,任务等是实现异步和并行编程的技术。

我能够理解并行和异步编程的最简单的方法之一是考虑从Pluralsight采取的“煮鸡蛋”方案,我稍微改变了以包含线程。

并行编程

  • 滚刀:CPU
  • 多个花盆:线程
  • 多个鸡蛋:并行任务

你有多个鸡蛋(任务)需要同时煮沸。 在这个例子中,滚刀将是CPU,每个煮沸一个鸡蛋的锅将是一个单独的线程,鸡蛋是并行的任务。 我可以通过在滚刀(CPU)上同时添加更多花盆(螺纹)来煮多个鸡蛋(任务)。 如果不使用并行编程,我一次只能煮1x鸡蛋(任务),因为你只需要1xjar(螺纹)就可以使用,这最终会减慢煮鸡蛋的过程。

异步编程

  • Egg计时器:异步任务
  • 滚刀:CPU
  • 多个花盆:线程
  • 多个鸡蛋:任务

继上面的例子之后,你现在决定只想知道所有的鸡蛋都煮沸了,而不是每个鸡蛋煮沸完毕。 为此,您将使用异步任务,在此实例中将作为egg计时器。 当所有鸡蛋(任务)完成时,鸡蛋计时器(异步任务)将更新你,所以你可以自由地做其他事情直到这一点。