今天我终于确定我要在java上狠狠下功夫,因为我别无选择。
现在的目标是做一个能够让数据库互相通讯、交换数据的工具,在设计的时候考虑了多线程的问题,于是一个老问题又跑出来的--并发(concurrent)和并行(parallel)。
1 记忆的问题
翻译的人很有“才”--我们难以区分“发”和“行”的含义啊!为什么不翻译作实同时和伪同时?现在这样理解好了,“行”字有有“平行”的笔画,所以是parallel,“发”就是“伪同时”,因为“伪”,所以“发”,奸商哈哈。
2 比较
宏观上看二者是一样的效果,但微观上,并发是把时间切分成时间片,每个任务分别占用不同的时间片。
下面是某人的详细讲解,大家鼓掌:
引用
随着多核时代的来临,我们越来越多地听到“并发”(concurrent)、“并行”(parallel)这样的词汇
。然而这两个术语究竟的区别究竟在哪里,似乎大家并没有一致意见。
“并行”是指无论从微观还是宏观,二者都是一起执行的,就好像两个人各拿一把铁锨在挖坑,一小时后,每人一个大坑。
而“并发”在微观上不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行,从宏观外来看,好像是这些进程都在执行,这就好像两个人用同一把铁锨,轮流挖坑,一小时后,两个人各挖一个小一点的坑,要想挖两个大一点得坑,一定会用两个小时。
从以上本质不难看出,“并发”执行,在多个进程存在资源冲突时,并没有从根本提高执行效率。
所有的并发处理都有排队等候,唤醒,执行至少三个这样的步骤.所以并发肯定是宏观概念,在微观上他们都是序列被处理的,只不过资源不会在某一个上被阻塞 (一般是通过时间片轮转),所以在宏观上看多个几乎同时到达的请求同时在被处理。如果是同一时刻到达的请求也会根据优先级的不同,而先后进入队列排队等候 执行。
-------------------------------------------------------------
并发与并行是两个既相似而又不相同的概念:并发性,又称共行性,是指能处理多个同时性活动的能力;并行是指同时发生的两个并发事件,具有并发的含义,而并发则不一定并行,也亦是说并发事件之间不一定要同一时刻发生。
-------------------------------------------------------------
并发和并行的区别仅仅在发生时刻的不同吗?
举个例子理解一下,如:
假设有A、B 两个事件
并行:
如果A和B都在15:30同时发生,A 的运行时间为 5 分钟,B 的运行时间为 8 分钟
在前5分钟是并行,也包括并发,因为他们都是在同一时刻发生的
并发:
如果A在15:30发生,运行3分钟后,B事件发生,在以后的5分钟时间里,A和B 是并发的
-------------------------------------------------------------
并发,是在同一个cpu上同时(不是真正的同时,而是看来是同时,因为cpu要在多个程序间切换)运行多个程序。
并行,是每个cpu运行一个程序。
打个比方,并发,就像一个人(cpu)喂2个孩子(程序),轮换着每人喂一口,表面上两个孩子都在吃饭。
并行,就是2个人喂2个孩子,两个孩子也同时在吃饭。
从汉语的角度讲,“并发”与“并行”似乎没有什么本质差别;至于从英语的角度
讲,"concurrent"和"parallel"有没有差别我就不太清楚了。但是,从计算机科学的角度看,这两个术语
还是有本质差别的。
在我看来,所谓“并发”,是指一个过程在 **逻辑上** 是由许多同时执行的线索组成的,但是在 **物理
上** 这些线索不一定是同时执行的。比如在单处理器机器上,我们的进程、线程只能并发,不能并行。至
于“并行”,则恰恰相反,是指一个过程在 **物理上** 包含了许多同时进行的工作,但是在 **逻辑上**
并不一定是包含许多同时执行的线索的。比如我们在大规模科学计算领域总是听到“将程序并行化”之类
的说法,就是因为认为这些算法在逻辑上是串行的,只是在实现的时候进行了并发优化。另外一个例子来
自教科书"Computer Architecture: a quantitative approach",它里面大量地叙述了如何开发“指令级
并行”和“线程级并行”,就是因为这些内容是针对在物理上同时处理指令的。
当然,一个系统也可以既是并发的又是并行的,例如在多处理器系统上面的多线程(或多进程)web服务器
就是这样。至此,我们发现“并发”和“并行”这两个极为接近的术语竟然含义是正交的,完全不相关!
在科学界,类似这样的例子还有不少,比如“精确”和“准确”这两个词,在《大学物理试验》课程中就
辨析过,前者是指标准差小,而后者指均值与真值接近,呵呵,又是正交的概念。
分享到:
相关推荐
并发编程和并行计算是计算机科学中的两个重要概念,它们都是为了提高系统效率和资源利用率。在多任务处理和高性能计算领域,理解并发和并行的区别至关重要。 **并发(Concurrency)**: 并发主要关注的是任务的执行...
在IT领域,"并发与并行"是两个重要的概念,特别是在多核处理器和分布式系统中。它们涉及到如何高效地利用计算资源,以提高程序的执行效率。本文将深入探讨这两个概念,以及相关的工具和技术。 首先,我们要理解并发...
在Python编程中,并发和并行编程是提升程序性能的关键技术。这些技术允许程序同时执行多个任务,从而充分利用多核处理器的能力。以下是对给定文件中提供的五个不同代码示例的详细解释: 1. **多线程实现并发**: ...
本资源提供了30个Python算法代码示例,涵盖了并发和并行算法、YOLO算法等多种领域。其中,YOLO算法是一种常用的目标检测算法,能够实时检测图像或视频中的目标对象。本资源提供了多个使用YOLO算法的Python代码示例,...
总的来说,Go语言在并发和并行编程方面提供了非常丰富的库和工具,这些工具的设计哲学是简洁、高效和易于理解。随着Go语言的广泛应用,其并发模型也成为了并发编程研究和实践的重要参考。对于希望深入理解并发编程,...
- **并行编程模型**:包括数据并行和任务并行两种方式。 - **设计并行算法要考虑的原则**:负载均衡、通信开销、并发控制等。 #### 第2章 并发编程模型 **线程池** 线程池是一种管理线程的机制,用于重用线程并...
- **快速完成任务**:通过并发和并行技术,可以显著减少完成大型任务所需的时间。 - **提高计算速度**:并行处理可以充分利用多核处理器的能力,显著提升计算速度。 - **更有效地利用硬件资源**:合理分配任务可以...
该存储库包含我的并发和并行化课程中的一些示例,其组织方式如下: . ├── data # experiment data and reports ├── p01-montecarlo # pi approximation by the montecarlo method (Java) ├── p02-...
6. **Join-calculus(Join演算)**:Join-calculus是一种用于表达并发和并行行为的形式化模型。 7. **Functional Programming(函数式编程)**:函数式编程强调无副作用的纯函数调用,有助于简化并发编程。 #### 四...
并发和并行虽然经常一起使用,但两者之间存在区别。并发是指多个线程在一段时间内交替执行,而并不意味着同时执行;并行则指多个线程在同一时刻真正地同时执行。在多核或多处理器系统中,可以同时进行并发和并行。 ...
并发和并行是两个密切相关的概念,也是并发编程中经常探讨的焦点。并行指的是在同一时刻,多条指令在多个处理器上同时执行,能够实际同时进行,这主要体现在多处理器系统中。而并发则不同,它指的是在同一时刻,只能...
标签"Python开发-并发和并行执行"表明ServosFramework支持并发和并行操作。在多核处理器系统中,进程级别的并行执行能充分利用硬件资源,提高程序执行效率。框架可能包含线程池、事件循环或其他并发机制,以协调和...
在Python-pagmo中,并发和并行执行是实现高性能的关键。并发是指在同一时间处理多个任务,但并不一定需要多个处理器。Python-pagmo通过GIL(全局解释器锁)的管理,有效地在单个CPU上实现线程间的并发。而并行执行则...
在设计并行程序时,应遵循一些原则,如采用任务导向的设计思想,理解交错并发、并发和并行的区别,并尽量减少临界区的使用,确保多核并行程序的高效运行。对于NUMA(非统一内存访问)架构,需要考虑内存访问延迟,以...
本文将详细探讨并发和并行的区别,线程的实现与管理,以及Java中用于并发控制的关键机制和工具。 首先,了解并发和并行的基本概念。并行是指多个CPU实例或多台机器同时执行任务,实现真正的同步执行。而并发则是...
什么是并发、并行
并发和并行编程: 处理Python中的并发和并行编程,介绍多线程、多进程和协程等概念,以及如何使用它们来提高程序性能。 设计模式: 探讨常见的设计模式,如工厂模式、单例模式、观察者模式等,以及如何在Python中...
在这样的系统中,并发和并行处理是实现高效运行的关键。 首先,我们需要理解并发的概念。并发是指在一段时间内,多个任务或进程看似同时执行。在单处理器系统中,通过时间片轮转或其他调度算法实现,而在多处理器或...