并发和并行之间的区别是什么?
当前回答
这个来源的解释对我很有帮助:
并发性与应用程序如何处理多个任务有关一个应用程序可以一次处理一个任务(按顺序)或同时处理多个任务(同时)。另一方面,并行性与应用程序处理每个单独的任务。应用程序可以处理该任务从开始到结束依次执行,或将任务拆分为子任务可以并行完成。正如您所看到的,应用程序可以是并发的,但不能是并行的。这意味着它同时处理多个任务,但是这些任务不分解为子任务。应用程序也可以是并行的,但不能是并发的。这意味着应用程序一次只能处理一个任务,而此任务被分解为可以并行处理的子任务。此外,应用程序既不能是并发的,也不能是并行的。这意味着它一次只能处理一个任务从未分解为并行执行的子任务。最后,应用程序也可以是并发和并行的,在它可以同时处理多个任务,也可以中断将每个任务分解为子任务以并行执行。然而并发性和并行性的好处可能会因此而丧失由于计算机中的CPU已经处于相当繁忙的状态仅具有并发性或并行性。结合起来可能会导致只有很小的性能增益或甚至性能损失。
其他回答
太好了,让我用一个场景来展示我的理解。假设有三个孩子:A,B,C。A和B说话,C听。对于A和B,它们是平行的:A: 我是A。B: 我是B。
但对于C来说,他的大脑必须同时进行听A和B的过程,这可能是:我是我A是B。
平行度:让多个线程执行类似的任务,这些任务在数据和资源方面彼此独立。例如:谷歌爬虫可以产生数千个线程,每个线程可以独立完成任务。
并发性:当您在线程之间共享数据和共享资源时,并发性就会显现出来。在事务系统中,这意味着您必须使用一些技术(如锁、信号量等)同步代码的关键部分。
并发:如果一个处理器解决了两个或多个问题。
并行性:如果一个问题由多个处理器解决。
并行编程执行有两种类型:非并行并行编程和并行并行编程(也称为并行)。
关键的区别在于,在人类看来,非并行并发中的线程似乎同时运行,但实际上它们并不运行。在非并行并发中,线程通过时间切片快速切换并轮流使用处理器。虽然并行有多个处理器可用,但多个线程可以同时在不同的处理器上运行。
参考文献:编程语言中的并发简介
想象一下,通过观看视频教程学习一种新的编程语言。你需要暂停视频,应用代码中所说的内容,然后继续观看。这就是并发性。
现在你是一名职业程序员了。你喜欢在编码时听平静的音乐。这就是平行主义。
正如Andrew Gerrand在GoLang博客中所说
并发是指同时处理许多事情。相似一次做很多事情。
享受