第13章  多线程与多核编程
多任务的并发执行会用到多线程(multithreading),而CPU的多核(mult-core)化又将原来只在巨型机中才使用的并行计算(parallel computing)带入普通PC应用的多核程序设计(multi-core programming)中。
13.1  进程与线程
进程(process)是执行中的程序,线程(thread)是一种轻量级的进程。
13.1.1  进程与多任务
现代的操作系统都是多任务(multitask)的,即可同时运行多个程序。进程(process)是位于内存中正被CPU运行的可执行程序。参见图15-1
15-1  程序与进程
目前的主流计算机采用的都是冯·诺依曼(John von Neumann)体系结构——存储程序计算模型,程序(program)就是在内存中顺序存储并以线性模式在CPU中串行执行的指令序列。对于传统的单核CPU计算机,多任务操作系统的实现是通过CPU分时(time-sharing)和程序并发(concurrency)完成的。即在一个时间段内,操作系统将CPU分配给不同的程序,虽然每一时刻只有一个程序在CPU中运行,但是由于CPU的速度非常快,在很短的时间段中可在多个进程间进行多次切换,所以用户的感觉就像多个程序在同时执行,我们称之为多任务的并发。
13.1.2  进程与线程
thread技术程序一般包括代码段、数据段和堆栈,对具有GUI(Graphical User Interfaces,图形用户界面)的程序还包含资源段。进程(process)是应用程序的执行实例,即正在被执行的程序。每个进程都有自己的虚拟地址空间,并拥有操作系统分配给它的一组资源,包括堆栈、寄存器状态等。
线程(thread)是CPU的调度单位,是进程中的一个可执行单元,是一条独立的指令执行路径。线程只有一组CPU指令、一组寄存器和一个堆栈,它本身没有其他任何资源,而是与拥
有它的进程共享几乎一切,包括进程的数据、资源和环境变量等。线程的创建、维护和管理给操作系统的负担比进程要轻得多,所以才叫轻量级的进程(lightweight process)。
一个进程可以拥有多个线程,而一个线程只能属于一个进程。每个进程至少包含一个线程——主线程,它负责程序的初始化工作,并执行程序的起始指令。随后,主线程可为执行各种不同的任务而分别创建多个子线程。
一个程序的多个运行,可以通过启动该程序的多个实例(即多个进程)来完成,也可以只运行该程序的一个实例(一个进程),而由该进程创建多个线程来做到。显然后者要比前者更高效,更能节约系统的有限资源。这对需要在同一时刻响应成千上万个用户请求的Web服务器程序和网络数据库管理程序等来说是至关重要的。
多线程图示
其中:A为主线程,B、C、D皆为A的子线程
不同并行任务中的同名子线程可以互不相同
13.1.3  多线程编程的困难
因为同一程序(进程)的多个线程共享同样的数据和资源,所以会出现同步、排队和竞争等问题,可能导致死锁、无限延迟和数据竞争等现象的发生,这些都需要我们在程序中加以解决。
MFC虽然提供了一个线程类和若干同步类,但是仍然属于线程的低级编程,既困难又繁琐。利用.NET框架类库中的线程命名空间下的线程类,则可以简化线程编程。
13.5.2  多核处理器
多核,即多微处理器核心,是将两个或更多的独立处理器核封装在一个集成电路(IC)芯片中的一种方案。一般说来,多核心微处理器允许一个计算设备,在不需要将多个处理器核心分别进行独立的物理封装情况下,可以执行某些形式的线程级并行处理(Thread-Level Parallelism,TLP)。这种形式的TLP,通常被认为是芯片级别的多处理(Chip-level MultiProcessing,CMP)。
1.多核构架
按硬件层次划分,多核的种类有:
芯片级(多核芯片):片上多核处理器(Chip Multi--Processor,CMP)就是将多个计算内核集成在一个处理器芯片中,从而提高计算能力。按计算内核的对等与否,CMP可分为同构多核(如Intel和Sun)和异构多核(如IBM)。CPU核心数据共享与同步,包括总线共享Cache结构(每个CPU内核拥有共享的二级或三级Cache,用于保存比较常用的数据,并通过连接核心的总线进行通信。例如Intel的Core 2 Due和Core i7)和基于片上互连的结构(每个CPU核心具有独立的处理单元和Cache,各个CPU核心通过交叉开关或片上网络等方式连接在一起。例如Intel的Pentium D和Core 2 Quad)。参见下图:
 
Intel Core 2 Due的平面和逻辑结构图
板级:在一块主板上集成多个(多核)芯片。参见下图:
机架级:将多个含(多核)处理器的主板置于同一机箱内,主板之间利用专用芯片和线路进行通信。
网络级(网格):将多个(多核)主机用(局域或互联)网连接在一起,构成分布式多核系统。
我们下面只讨论CMP级的多核,并且以Intel公司的Core系列微处理器为主。
2.体系结构
下面简单介绍一般的超线程与多核的体系结构,以及主流的单核和多核处理器——Intel公司
的Pentium、Pentium D、Core 2和Core i7的逻辑结构及其基础微架构。
多核和超线程
下面是单核、多核和超线程处理器的体系结构(architecture)示意图:
下面是分别单核与多核处理器的芯片结构图:
奔腾处理器
下面是Intel Pentium(奔腾)微处理器的功能结构图:
奔腾D处理器
下面是Intel Pentium D微处理器及其配套芯片组的功能结构图:
Intel Core 2Intel Core微架构
下面是酷睿2双核处理器的逻辑结构图:
Core 2 Due处理器逻辑结构图
其中:ROM = Read Only Memory 只读存贮器、ROB = 、
FPU = Float Point Unit 浮点运算单元、ALU= Arithmetic Logical Unit 算术逻辑部件、
TLB = Translation Lookaside Buffer转译后备缓冲器(转址旁路缓存/页表缓存)、
LD = 、ST = 、D-TLB = Data-TLB 数据TLB
酷睿2处理器是基于Intel Core 微架构(microarchitecture)的,下面是其逻辑结构图:
Intel Core微架构逻辑结构图
Intel Core i7Intel Nehalem微架构
下面是酷睿i7四核处理器的平面结构图:
Core i7处理器平面结构图

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。