在真正开始聊本文的主题以前,咱们先来回顾下两个老生常谈的概念:并发和并行。程序员
下面贴上一张图来解释下这两个概念:编程
上图中的咖啡就能够当作是CPU,上面的只有一个咖啡机,至关于只有一个CPU。想喝咖啡的人只有等前面的人制做完咖啡才能制做本身的开发,也就是同一时间只能有一我的在制做咖啡,这是一种并发模式。下面的图中有两个咖啡机,至关于有两个CPU,同一时刻能够有两我的同时制做咖啡,是一种并行模式。安全
咱们发现并行编程中,很重要的一个特色是系统具备多核CPU。要是系统是单核的,也就谈不上什么并行编程了。那么是什么缘由致使了现代CPU架构都是多核架构?若是CPU架构都是单核的架构咱们是否是就能不要研究什么并行编程了?多线程
上面章节中留下了一个问题:为何现代CPU都是多核架构。为了回答这个问题,咱们先来了解一个定律--摩尔定律。架构
1965年,英特尔联合创始人戈登·摩尔提出以本身名字命名的「摩尔定律」,意指集成电路上可容纳的元器件的数量每隔 18 至 24 个月就会增长一倍,性能也将提高一倍。并发
根据摩尔定律,CPU的性能每隔18到24个月就能增加一倍。可是从如今的状况来看,单核CPU的主频已经逼近了极限,以如今的制造工艺,很难再继续提高单核CPU的主频。也就是说摩尔定律已经失效。性能
虽然摩尔定律失效了,可是科技的进度对CPU性能的需求没有中止。这个也难不倒咱们伟大的硬件工程师。一个CPU的性能提高有限,我将两个CPU拼在一块儿性能不就提高一倍了么。因而多核CPU的架构就出现了。线程
提升CPU工做主频主要受到生产工艺的限制。因为CPU是在半导体硅片上制造的,在硅片上的元件之间须要导线进行联接,因为在高频状态下要求导线越细越短越好,这样才能减少导线分布电容等杂散干扰以保证CPU运算正确。所以制造工艺的限制,是CPU主频发展的最大障碍之一。设计
为了继续保持性能的高速发展,硬件工程师破天荒地想出了将多个CPU内核塞进一个CPU里的奇妙想法。由此,并行计算就被很是天然地推广开来,随之而来的问题也层出不穷,程序员的黑暗时期也随之到来。简化的硬件设计方案必然带来软件设计的复杂性。换句话说,软件工程师正在为硬件工程师没法完成的工做负责,他们将摩尔定律失效的责任推给了软件开发者。3d
因此,如何让多个CPU有效而且正确地工做也就成了一门技术,甚至是很大的学问。好比,多线程间如何保证线程安全,如何正确理解线程间的无序性、可见性,如何尽量地设计并行程序,如何将串行程序改造为并行程序。而对并行计算的研究,也就是但愿给这片黑暗带来光明。
世界就是这样一个矛盾体,并发编程能让咱们充分地利用CPU资源,提高系统性能。可是同时也给咱们带来了不少问题,好比线程上下文切换对性能消耗的问题、共享变量的线程安全问题、线程死锁问题和线程间通讯等问题。研究并行编程就是研究怎么在享受多线程编程给咱们带来便利的同时又能规避多线程带来的坑。