其实在了解多进程和多线程之前,我们有必要先了解下并行和并发,多核多CPU的基础概念。
并发和并行
从宏观上来讲都是同时处理多路请求的概念。但并发和并行又有区别,并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔内发生,由CPU时间片进行切换。
多核多CPU
先看看“核”是什么吧?
核(Die)又称为内核,是CPU最重要的组成部分。CPU中心那块隆起的芯片就是核心,是由单晶硅以一定的生产工艺制造出来的,CPU所有的计算、接受/存储命令、处理数据都由核心执行。各种CPU核心都具有固定的逻辑结构,一级缓存、二级缓存、执行单元、指令级单元和总线接口等逻辑单元都会有科学的布局。
再看看单核多CPU
单核多CPU,也就是每一个CPU都需要有较为独立的电路支持,有自己的Cache,而他们之间通过板上的总线进行通信。假如在这样的架构上,我们要跑一个多线程的程序(常见典型情况),不考虑超线程,那么每一个线程就要跑在一个独立的CPU上,线程间的所有协作都要走总线,而共享的数据更是有可能要在好几个Cache里同时存在。这样的话,总线开销相比较而言是很大的,怎么办?那么多Cache,不仅
浪费存储
的能力,而且一致性又没保证,如果真正做出来,还要在主板上占多块地盘,给布局布线带来更大的挑战,那又该怎办?
最后看看多核单CPU
多核单CPU 只需要一套芯片组,一套存储,多核之间通过芯片内部总线进行通信,共享使用内存。在这样的架构上,如果我们跑一个多线程的程序,那么线程间通信将比上一种情形更快。如果最终实现出来,对板上空间的占用较小,布局布线的压力也较小。另一方面多核是指在一个处理器上集成多个个运算核心,从而提高计算能力。
从上面可以看出,多核单CPU比起单核多CPU性能更优。可是,如果需要同时跑多个大程序怎么办?假设俩大程序,每一个程序都好多线程还几乎用满cache,它们分时使用CPU,那在程序间切换的时候,光指令和数据的替换就要费多大事情啊!
因此,大部分一般我们使用的电脑,都是多核单CPU的,但是如果需要更高的并发能力,就需要配置多核多CPU的机子。
因此,大部分一般我们使用的电脑,都是多核单CPU的,但是如果需要更高的并发能力,就需要配置多核多CPU的机子。