多核并行编程技术(一)

首先需要先理解几个概念:
串行:最基本的程序执行方式,串行程序的整个运行时,只有一个调用栈和一个运行时上下文,单进程/单线程程序可以认为是串行程序。
并发:多线程出现后比较常见的程序执行方式,多线程程序运行时,会有多个运行时上下文和对应的多个调用栈。逻辑上多个线程同时发生,物理上是有操作系统调度,CPU某一时刻依然只执行一个线程的任务,但是某个执行中的线程随时可能被OS调度走,而随后运行的线程操作的数据可能跟刚刚被调度走的线程造成冲突,所以有共享数据同步问题。
  多进程如果有共享数据,也符合并发程序的特点,相对于多线程并发,多进程并发解耦更彻底,数据分割更清晰。
  另外,前述并发情况是从用户程序的角度,从内核的角度,还会有其他类似的场景,比如中断。中断处理程序和中断之前执行的程序也有可能有共享数据冲突的问题。
  简单的说,并发指多个线程在同一个硬件资源上交替执行的过程,也就是所有活动线程在某段时间内同时执行的状态,但在某个给定的时刻都只有一个线程在执行。
并行:多核处理器出现后会越来越常见的程序执行方式,物理上多个任务可以同时运行,这个概念介于操作系统和体系架构之间,从操作系统而言,依然是调度多个线程/进程去CPU执行,只不过有了多个CPU/核心,不同线程/进程可以绑定从而完全占用一颗核心,所以从体系架构的角度,同一时刻是有多个任务同时运行,另外一些说,如‘多处理器程序’、‘多核程序’都可以认为属于并行程序的范畴。
  简单的说,并行指多个线程在不同的硬件资源或者处理单元上同时执行,也就是说多个线程在任何时间点都同时执行。

从概念的范围看,并行 < 并发,即并行的程序肯定是并发的,并发的程序不一定是并行的。但是,无论是逻辑上的并发(单处理器,多线程/多进程)还是物理上的并发(并行,多处理器),所面临的共享数据操作一致性问题是一样的,在很多情况下,多核编程可以近似认为是多线程编程。

问题:微处理器为什么要从单核发展到多核?
答案:功耗问题限制了单核不断提高性能的发展途径。
具体可以参考Intel官网上面关于这个问题的解释:http://blogs.intel.com/china/2007/06/03/post_5/

posted @ 2016-06-15 22:03  亚洲舞王尼古拉斯赵四  阅读(389)  评论(0编辑  收藏  举报