欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

并发和并行 多线程算法活动Web工作

程序员文章站 2022-07-14 16:57:50
...
今天我终于确定我要在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服务器

就是这样。至此,我们发现“并发”和“并行”这两个极为接近的术语竟然含义是正交的,完全不相关!

在科学界,类似这样的例子还有不少,比如“精确”和“准确”这两个词,在《大学物理试验》课程中就

辨析过,前者是指标准差小,而后者指均值与真值接近,呵呵,又是正交的概念。