今天我终于确定我要在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服务器
就是这样。至此,我们发现“并发”和“并行”这两个极为接近的术语竟然含义是正交的,完全不相关!
在科学界,类似这样的例子还有不少,比如“精确”和“准确”这两个词,在《大学物理试验》课程中就
辨析过,前者是指标准差小,而后者指均值与真值接近,呵呵,又是正交的概念。
分享到:
相关推荐
在实际应用中,可以将并发和并行结合使用,以提高系统的性能和响应速度。例如,可以使用并发来管理多个请求的同时处理,然后在每个请求内部使用并行来加速计算任务。 ———————————————— 版权声明:...
15个Python的并发和并行编程的代码示例集合
30 python算法代码示例(并发和并行算法 YOLO算法).docx
NULL 博文链接:https://duhuilin01.iteye.com/blog/526157
go语言并发并行机制大揭秘,这本书里详细的讲解了关于go语言的并发和并行机制。值得一看。
该存储库包含我的并发和并行化课程中的一些示例,其组织方式如下: . ├── data # experiment data and reports ├── p01-montecarlo # pi approximation by the montecarlo method (Java) ├── p02-...
1.6.2 理解交错并发、并发和并行之间的区别 1.6.3 并行化任务 1.6.4 尽量减少临界区 1.6.5 理解多核并行程序的设计原则 1.7 为NUMA架构和更高的可扩展性做好准备 1.8 判断是否适合并行化 1.9 小结 第2章 命令...
并发和并行的区别:并发是指同时处理多个任务的能力,而并行是指同时执行多个任务的能力。并发通常发生在单处理器系统中,通过任务切换的方式实现多个任务之间的迅速切换。而并行则需要多个处理器或多核处理器,并且...
什么是并发、并行
并发和并行编程: 处理Python中的并发和并行编程,介绍多线程、多进程和协程等概念,以及如何使用它们来提高程序性能。 设计模式: 探讨常见的设计模式,如工厂模式、单例模式、观察者模式等,以及如何在Python中...
1.6.2 理解交错并发、并发和并行之间的区别 1.6.3 并行化任务 1.6.4 尽量减少临界区 1.6.5 理解多核并行程序的设计原则 1.7 为NUMA架构和更高的可扩展性做好准备 1.8 判断是否适合并行化 1.9 小结 第2章 命令式数据...
1.6.2 理解交错并发、并发和并行之间的区别 1.6.3 并行化任务 1.6.4 尽量减少临界区 1.6.5 理解多核并行程序的设计原则 1.7 为NUMA架构和更高的可扩展性做好准备 1.8 判断是否适合并行化 1.9 小结 第2章 命令...
本文主要给大家介绍了关于ruby并发并行和全局锁的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 并发和并行 在开发时,我们经常会接触到两个概念: 并发和并行,几乎所有谈到并发和...
但在这当中,发现一些概念区分起来很难,比如并发和并行,同步和异步,阻塞和非阻塞,但是这些概念却很重要。因此在此把它总结下来。并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间...
Rust的并发和并行处理能力也使其成为处理大规模数据和高并发负载的应用程序的理想选择。 在学习Rust的过程中,有许多资源可供参考。Rust的官方网站提供了详细的文档、教程和示例代码,帮助初学者快
Cogo提供两种并行性:隐式和显式。 隐式并行性意味着Cogo将控制使用多少goroutine引入并行性,与显式并行性相比,显式并行性将控制权交给了用户。 隐式并行 在下面的示例中,我们使用co.ForAll函数遍历不同的迭代器...
Intel资深专家James Reinders将在本课程中倾囊相授,为您介绍克服多核挑战的新工具和方法,以帮助开发者通过并发和并行计算真正释放出多核的强劲动力。James Reinders曾参加了很多Intel处理器和并行系统的编译和架构...