并发和并行之间的区别是什么?
当前回答
只是为了给其他好答案添加更多的澄清:
基于处理的抽象(CPU作为一个完全可以想象的例子)能够在同一时刻运行唯一的任务的前提,
并发是一个关于处理抽象的故事:它可以在不同的任务之间切换。
并行是一个关于我们有多个处理抽象的故事(例如,我们的CPU有多个内核)。因此,这是我们的系统能够同时执行多个任务的原因(字面意思)。但这里没有提到处理的特定抽象(它们是否并发)。
这里的重点是这些故事的内容。
因此,当您阅读公认答案时,请注意:
并发是指两个或多个任务可以在重叠的时间段。
严格地说,我们可以根据这个定义得出结论,并行性本身就是并发性的前提。
其他回答
这篇惊人的博客节选:
并发和并行之间的区别:并发是指两个任务可以在重叠的时间段。并行性是指任务在例如在多核处理器上。并发是独立执行进程的组成,而并行是同时执行(可能相关)计算。并发是指同时处理许多事情。相似一次做很多事情。应用程序可以是并发的,但不能是并行的,这意味着它同时处理多个任务,但没有两个任务在同一时刻执行。应用程序可以是并行的,但不能是并发的,这意味着它在多核CPU中同时处理一个任务的多个子任务时间应用程序既不能并行,也不能并发,这意味着它一次一个地、顺序地处理所有任务。应用程序既可以是并行的,也可以是并发的,这意味着它在多核CPU中同时处理多个任务时间
并发:如果一个处理器解决了两个或多个问题。
并行性:如果一个问题由多个处理器解决。
简单地说,并发就是同时处理很多事情。
“处理”一词用粗体显示了并发和并行之间的区别。同时处理许多事情意味着同时完成许多事情,但它们是否同时执行并不重要。另一方面,并行意味着同时做很多事情(同时执行)。因此,可以使用一个或多个处理资源来实现并发上下文。使用一个处理资源同时处理许多事情意味着通过在任务之间进行上下文切换,可以同时执行许多事情。另一方面,具有许多处理资源的并发上下文意味着进行并行处理。这意味着我们通过并行来实现并发,但反之亦然。
在我的文章中,您可能想了解更多关于并发性和并行性及其与当今技术的关系。
假设你有一个有两个线程的程序。程序可以通过两种方式运行:
Concurrency Concurrency + parallelism
(Single-Core CPU) (Multi-Core CPU)
___ ___ ___
|th1| |th1|th2|
| | | |___|
|___|___ | |___
|th2| |___|th2|
___|___| ___|___|
|th1| |th1|
|___|___ | |___
|th2| | |th2|
在这两种情况下,我们都有并发性,这仅仅是因为我们有多个线程在运行。
如果我们在具有单个CPU内核的计算机上运行此程序,操作系统将在两个线程之间切换,允许一次运行一个线程。
如果我们在带有多核CPU的计算机上运行这个程序,那么我们就可以同时并行运行两个线程。
想象一下,通过观看视频教程学习一种新的编程语言。你需要暂停视频,应用代码中所说的内容,然后继续观看。这就是并发性。
现在你是一名职业程序员了。你喜欢在编码时听平静的音乐。这就是平行主义。
正如Andrew Gerrand在GoLang博客中所说
并发是指同时处理许多事情。相似一次做很多事情。
享受
推荐文章
- 在支持循环和函数的语言中,是否存在“goto”的合法用例?
- 否ConcurrentList<T>在。net 4.0?
- 为什么不使用异常作为常规的控制流呢?
- 线和纤维的区别是什么?
- 什么是序列化?
- Haskell对Node.js的响应是什么?
- 每个递归都可以转换成迭代吗?
- 什么是ORM,它是如何工作的,我应该如何使用它?
- 我能在服务器端应用程序(PHP、Ruby、Python等)上读取URL的哈希部分吗?
- 多少个参数是太多?
- 对于不可变集合上的非突变“add”方法,最好的名称是什么?
- foo到底是什么意思?
- foreach和map有区别吗?
- 设计模式:工厂vs工厂方法vs抽象工厂
- 为什么处理排序数组比未排序数组慢?