并发和并行之间的区别是什么?


当前回答

这篇惊人的博客节选:

并发和并行之间的区别:并发是指两个任务可以在重叠的时间段。并行性是指任务在例如在多核处理器上。并发是独立执行进程的组成,而并行是同时执行(可能相关)计算。并发是指同时处理许多事情。相似一次做很多事情。应用程序可以是并发的,但不能是并行的,这意味着它同时处理多个任务,但没有两个任务在同一时刻执行。应用程序可以是并行的,但不能是并发的,这意味着它在多核CPU中同时处理一个任务的多个子任务时间应用程序既不能并行,也不能并发,这意味着它一次一个地、顺序地处理所有任务。应用程序既可以是并行的,也可以是并发的,这意味着它在多核CPU中同时处理多个任务时间

其他回答

平行度:让多个线程执行类似的任务,这些任务在数据和资源方面彼此独立。例如:谷歌爬虫可以产生数千个线程,每个线程可以独立完成任务。

并发性:当您在线程之间共享数据和共享资源时,并发性就会显现出来。在事务系统中,这意味着您必须使用一些技术(如锁、信号量等)同步代码的关键部分。

并发是指两个或多个任务可以在重叠的时间段内启动、运行和完成。这并不一定意味着它们会同时运行。例如,在单核机器上进行多任务处理。

并行性是指任务实际上同时运行,例如在多核处理器上。


引用Sun的多线程编程指南:

并发:至少有两个线程正在进行时存在的条件。一种更为普遍的并行形式,可以将时间切片作为虚拟并行的一种形式。并行性:当至少两个线程同时执行时出现的情况。

同意:具有共享资源潜力的多个执行流

前任:两个线程竞争I/O端口。

视差:将问题分成多个相似的块。

前任:通过对文件的每一半运行两个进程来解析大文件。

太好了,让我用一个场景来展示我的理解。假设有三个孩子:A,B,C。A和B说话,C听。对于A和B,它们是平行的:A: 我是A。B: 我是B。

但对于C来说,他的大脑必须同时进行听A和B的过程,这可能是:我是我A是B。

并发编程关注的是看似重叠的操作,主要关注的是由于非确定性控制流而产生的复杂性。与并发程序相关的定量成本通常是吞吐量和延迟。并发程序通常受IO限制,但并不总是如此,例如并发垃圾收集器完全在CPU上。并发程序的教学示例是网络爬虫。该程序启动对网页的请求,并在下载结果可用时同时接受响应,从而累积一组已访问的网页。控制流是非确定性的,因为每次运行程序时,响应不一定以相同的顺序接收。这种特性会使调试并发程序变得非常困难。有些应用程序基本上是并发的,例如web服务器必须同时处理客户端连接。Erlang可能是未来最有前途的高度并发编程语言。并行编程涉及为提高吞吐量的特定目标而重叠的操作。通过使控制流具有确定性,避免了并发编程的困难。通常,程序生成并行运行的子任务集,父任务仅在每个子任务完成后才继续。这使得并行程序更容易调试。并行编程的难点是针对粒度和通信等问题的性能优化。后者在多核环境中仍然是一个问题,因为将数据从一个缓存传输到另一个缓存会产生相当大的成本。密集矩阵矩阵乘法是并行编程的一个教学示例,它可以通过使用Straasen的分治算法和并行攻击子问题来有效地解决。Cilk可能是共享内存计算机(包括多核)上最有前途的高性能并行编程语言。

从我的回答中复制:https://stackoverflow.com/a/3982782