我很困惑,因为异步编程是一种异步执行代码块的方法,它调用一个方法并且不等待结果。同样,并行编程是一种同时执行多个任务的方法,但所有这些任务都是异步执行的。所以想知道/混淆c#中这两种编程范式之间的关系是什么。
6 回答
并行编程是一种我们使用多个线程更快地执行任务的技术。这意味着在现代多核架构上,我们可以利用更多可用资源来执行任务。
一个很好的例子是使用快速排序对列表进行排序。
通常对于并行编程,性能很重要,所有线程都在朝着一个共同的目标工作。
异步编程略有不同。这通常涉及运行时间较长的任务和可能正在等待某种外部刺激的任务。一个很好的例子是在后台线程中执行大型计算,以便 UI 保持响应。对于异步代码,我们通常谈论的代码执行速度与我们的主应用程序不同。
并行编程意味着执行操作同时使用多个线程,处理 cpu 和/或内核。
您所说的异步编程意味着触发请求并提供回调机制来接收响应。
最后 :
对CPU 密集型解决方案使用并行编程。对IO Bound解决方案使用异步编程。
一般来说,异步意味着尽可能执行,并行意味着通过创建一个新的执行线程立即执行。
这里是链接
并行编程主要关注提高系统的性能。
异步编程主要关注提高系统的响应能力。
线程、任务等是实现异步和并行编程的技术。
我能够理解并行和异步编程的最简单的方法之一是考虑从 Pluralsight 中提取的“煮鸡蛋”场景,我已经稍微改变了它以合并线程。
并行编程
- 滚刀:CPU
- 多个锅:线程
- 多个鸡蛋:并行任务
您有多个鸡蛋(任务)需要同时煮。在这个例子中,滚刀是 CPU,每个煮一个鸡蛋的锅都是一个线程,鸡蛋是并行任务。我可以通过同时向滚刀(CPU)添加更多的锅(线程)来煮多个鸡蛋(任务)。如果不使用并行编程,我一次只能煮 1 个鸡蛋(任务),因为您只有 1 个锅(线程)可以使用,这最终会减慢煮鸡蛋的过程。
异步编程
- Egg Timer:异步任务
- 滚刀:CPU
- 多个锅:线程
- 多个鸡蛋:任务
继上面的示例之后,您现在决定只想知道所有鸡蛋何时煮熟,而不是每个鸡蛋何时煮熟。为此,您将使用一个异步任务,在这种情况下将作为鸡蛋计时器播放。当所有的鸡蛋(任务)都完成时,鸡蛋计时器(异步任务)会更新你,这样你就可以自由地做其他事情了。