1、一、简述用户级线程和内核级线程之间的映射模型有哪些,并分别加以说明:1.多对一模型1)多对一模型把多个用户级线程映射到一个内核级线程。2)线程的管理在用户空间实现,所以效率高。3)当一个线程因调用系统调用被阻塞时,整个进程被阻塞。2.一对一模型1)一对一模型把每个用户级线程影射到一个内核级线程。2)当一个线程阻塞时,其他线程仍然可以运行。3.多对多模型1)多对多模型将m个用户级线程影射到n个内核级线程,mn。2)用户可以创建所需要的用户级线程,通过分配适当数目的内核级线程获得并发执行的优势并节省系统资源。二、简述下列 Windows 多线程程序设计中常用函数的含义 ResumeThread()
2、;被挂起线程的恢复运行 TerminateThread(); 终止线程运行InitializeCriticalSection(); 初始化线程临界区 CreateMutex(); 创建线程互斥量 CreateEvent(); 创建线程事件 三、简述下列 Linux 多线程程序设计中常用函数的含义 pthread_create(); 创建线程 pthread_join(); 线程阻塞(同步) pthread_attr_init(); 线程属性初始化pthread_cancel(); 线程取消sem_getvalue();获得线程信号量值四、常用的并行程序性能优化技术有哪些? 减少通信量,提高通信
3、粒度全局通信尽量利用高效集合通信算法挖掘算法的并行度, 减少 CPU 空闲等待负载平衡通信 ,计算的重叠通过引入重复计算来减少通信,即以计算换通信五、简述多线程机制的优点. 创建一个线程比创建一个进程的代价要小线程的切换比进程间的切换代价小充分利用多处理器数据共享快速响应特性可以是程序更加模块化, 减少程序逻辑六、 什么是线程、进程,它们之间的关系是什么? 答:进程是一组离散的(执行)程序任务集合;线程是进程上下文中执行的代码序列,又被称为轻量级进程。进程中可包含一个或多个线程。 七、由于线程共享同一进程的内存空间,多个线程可能需要同时访问同一个数据,如果没有正确的保护措施,对共享数据的访问会
4、造成数据的不一致和错误。简述 Windows环境下常用的全局变量、事件和临界区三种同步机制。 答:进程中的所有线程均可以访问所有的全局变量,各线程根据全局变量的状态来决定是否运行相应的线程函数,它是 Win32 多线程同步的最简单方式。 事件是 WIN32 提供的最灵活的线程间同步方式,各线程根据事件的激发状态来决定是否运行相应的线程函数。 临界区是一种防止多个线程同时执行一个特定代码段的机制,适用于多个线程操作之间没有先后顺序但要求互斥的同步。多个线程访问同一个临界区的原则: 一次最多只能一个线程停留在临界区内; 不能让一个线程无限地停留在临界区内,否则其他线程将不能进入该临界区。 八、衡量
5、处理器性能的主要指标是什么,并以此说明多核处理器产生的原因:衡量处理器性能的主要指标是每个时钟周期内可以执行的指令数(IPC:Instruction Per Clock)和处理器的主频。因此,提高处理器性能就是两个途径:提高主频和提高每个时钟周期内执行的指令数(IPC)。而通过改良架构来提高IPC的幅度是非常有限的,所以在单核处理器时代只能通过提高(处理器的)主频来提高性能,由于处理器功耗正比于主频的三次方,所以给处理器提高主频不是没有止境的。而将单核处理器增加到双核处理器,如果主频不变的话,IPC理论上可以提高一倍。所以为了达到更高的性能,在采用相同微架构的情况下,可以增加处理器的内核数量同
6、时维持较低的主频。(这样设计的效果是,更多的并行提高IPC,较低的主频有效地控制了功耗的上升)九、请分别说明 OpenMP 指导语句#pragma omp parallel, #pragma omp parallel for 和#pragma omp parallel private 的含义和作用。 答:#pragma omp parallel 区域并行性指导语句,说明后续语句按多线程方式运行; #pragma omp parallel for 循环并行化指导语句,说明后续 for 循环语句按多线程方式运行; #pragma omp parallel private 并行区变量私有化指导语句,
7、说明后续语句中的某变量在多线程方式运行时被各线程私有化,每次仅容许一个线程访问该变量。十、阐述超线程技术和多核架构在并行计算应用领域上的区别和联系:区别:超线程技术是通过延迟隐藏的方法提高了处理器的性能,本质上,就是多个线程共享一个处理核。因此,采用超线程技术所获得的性能并不是真正意义上的并行,从而采用超线程技术多获得的性能提升将会随着应用程序以及硬件平台的不同而参差不齐。多核处理器是将两个甚至更多的独立执行核嵌入到一个处理器内部。每个指令序列(线程),都具有一个完整的硬件执行环境,所以,各线程之间就实现了真正意义上的并行。联系:超线程技术:充分利用空闲CPU 资源,在相同时间内完成更多工作。
8、与多核技术相结合:给应用程序带来更大的优化空间,进而极大地提高系统的吞吐率。十一、简述程序员在申请互斥资源时避免产生死锁现象的三种程序设计方案: 1)线程以相同的次序进行加锁。2)使用非阻塞的加锁操作。3)(由于调度可能造成某些线程长时间等待,这时可以再线程释放锁之后)通过调用 yield后者类似功能的库函数或系统调用放弃 cpu 以便其他进程被投入执行并获得锁。十二、简述如何衡量“锁”的粒度,“锁”的粒度与数据并行性之间的关系: 锁的粒度是上锁后保护的共享数据的多少。减小锁的粒度可以提高对共享数据访问的并行性。编程题:计算圆周率 Pi 值(蒙特卡洛法或其它方法)Double PI(DOWRD
9、 dwCount)Double m=0;For(double n=0;n分析数据,定位性能瓶颈所在-考虑解决问题的可能途径与方法-实现 解决方案-重测试 B. 获取性能数据-考虑解决问题的可能途径与方法-分析数据,定位性能瓶颈所在-实现 解决方案-重测试 C. 考虑解决问题的可能途径与方法-实现解决方案-重测试-获取性能数据-分析数据,定位性能瓶颈所在 D. 考虑解决问题的可能途径与方法-实现解决方案-获取性能数据-分析数据,定位性能 瓶颈所在-重测试 2.需要被性能调优的程序必须处在开发的适当阶段并且必须具备如下特性:(ABC ) A. 程序必须是稳定的 B. 程序必须是有代表性的 C. 程
10、序必须使用了最新的技术 D. 对任何可能影响程序性能的代码都必须优化3.为了搜集性能数据,一个好的测试数据集是必不可少的。一个好的测试数据集需要具备哪些特点?(ABCD ) A. 可衡量性 B. 可重复性 C. 静态的 D. 有代表性 4. 对于 Amdahl 定律,以下表述不正确的是:(A ) A. 对程序的可优化部分进行最高限度的性能改进就能不断地提高程序的整体性能 B. 程序可能达到的加速上限为 1/f C. 如果要使得程序获得更高的性能,就要对程序中更大的部分进行性能调优 D. 程序的性能受限于程序中性能最差的部分 5.性能调优工作包括了:(ABCD ) A. 改进系统平台的资源利用率
11、 B. 提高有效性,减少延迟 C. 增加并发度 D. 改进吞吐量,减少可能的性能瓶颈 6.对一个具体的问题做性能优化时,可以同时在这多个层次上考虑可能的优化手段,一般说来:(AB ) A. 在越高的层次上进行优化,可能获得的效益越高 B. 在越低的层次上进行优化工作则相对越容易实现 C. 在越高的层次上进行优化,可能获得的效益越低 D. 在越低的层次上进行优化工作则相对越难于实现 7.VTune 性能分析器中的取样功能有哪几种方式? (AC ) A. 基于时间取样 B. 随机取样 C. 基于事件取样 D. 线性取样 8.Intel 调优助手能够给我们自动推荐代码改进办法,主要有以下哪些方面?(
12、BCD ) A. 算法自动改进 B. 处理器瓶颈以及改进 C. 取样向导增强 D. 超线程 9. 对于 Vtune 的兼容性,以下表述不正确的是:(B) A. 支持最新的 Intel 处理器 B. 不支持 Linux C. 支持 Windows 命令行 D. 支持最常用的编程语言 10.MKL 数学核心库的功能领域包括以下哪些?(D ) A. 离散傅立叶变换,ScaLAPACK 软件包 B. 矢量数学库,矢量统计库 C. PARDISO 稀疏矩阵解算器,线性代数 D. 以上都是 11.关于 Intel(R) 线程检查器,以下表述不正确的是:(D) A. 监控程序执行过程中的线程行为 B. 发现
13、其中存在的竞争现象、线程阻塞以及潜在的线程死锁问题 C. 提示同线程错误相关的源代码位置、侵权变量以及堆栈跟踪 D. 可以快速查找但不能修复 Windows 和 OpenMP*线程软件中的 bug 12.以下哪个问题不能用 Intel(R)线程检查器检测出来?(D ) A. 数据竞争 B. 线程死锁 C. 阻塞问题 D. 逻辑错误 13. 对于 Intel(R) 线程档案器,以下表述不正确的是:(A ) A. 只能帮助调整 Win32*线程化软件的性能 B. 通过监控程序的运行来检测线程性能的相关问题,包括线程过载和同步冲突,能够帮助 查找负载平衡, 同步开销等线程性能问题 C. 进行关键路径
14、分析 D. 提供图形式的检测结果,可以快速查明影响程序运行时间的代码位置 14.Intel(R) 线程档案器为 Win32 提供了哪些功能? (C) A. Win32 线程关键路径分析,跟踪显示性能瓶颈 B. 通过 Win32* 线程 API 对软件线程化后的性能分析 C. 可与任何 Windows 平台上的 IDE 集成 D. 如果不用 Win32 库,可以支持用户定义的同步原件 15.Intel(R) 线程档案器为 OpenMP 提供了哪些功能? (D ) A. 并行代码和顺序代码的时间花费 B. 线程任务量不均衡 C. 并行过载和顺序过载 D. 以上都是 16. 提高微处理器内部执行的并
15、行性有哪些措施。(C) A. 采用超级流水线技术 B. 采用超标量技术 C. 以上都是 D. 以上都不是17. 性能调优工作_知道什么时候结束调优,在开始性能调优工作之前,你_对整个程序进行一个基准测试以获知程序的理论峰值。(B) A. 需要,不需要 B. 需要,必须 C. 不需要,不需要 D. 不需要,必须 18. Jackson 优化定律是指:(C) A. 不要进行优化 B. 除非你已经有了一个相当清晰可靠的非优化版本的实现,否则你不要试图对程序进行优 化 C. 以上两条都是 D. 以上两条都不是 19. 根据 80/20 定律,_% 的执行时间消耗在_% 的代码上。(C) A. 80,8
16、0 B. 20,20 C. 80,20 D. 20,80 20. 多处理能力带来的最大好处是能够改进_,一个多线程程序的运行需要_个单处理器系统。(B) A. 吞吐量,多 B. 吞吐量,一 C. 频率,多 D. 频率,一 21. 决定延迟最重要的两个因素是_ 以及_ 。(D ) A. 内存存取时间,处理器频率 B. I/O 时间,处理器频率 C. I/O 时间,总线带宽 D. 内存存取时间,I/O 时间 22. 并发性既可以指对单个程序使用_处理,也可以指对多个程序使用_处理。(A ) A. 多任务,多任务 B. 多任务,单任务 C. 单任务,多任务 D. 单任务,单任务 23. 对于 Int
17、el VTune 性能分析器,以下表述正确的是:(D) A. 可以在程序运行的系统平台上自动搜集性能数据 B. 可以将所获得的性能数据在各个不同的层次,大至系统层,下至程序源代码级,甚至到 处理器指令级,进行不同粒度的交互式可视化,帮助查找可能的性能瓶颈,并提供可能的解决方案 C. VTune 既可以在本地、也可以远程搜集性能数据,并在本地进行数据处理、分析以及显示 D. 以上都正确 24. 对于 Intel(R) 线程检查器,以下表述不正确的是:(C) A. Intel(R) 线程检查器监控程序执行过程中的线程行为,发现其中存在的线程阻塞以及潜在的线程死锁问题 B. 提示同线程错误相关的源代
18、码位置、侵权变量以及堆栈跟踪等 C. 不能从 Windows 主机系统分析 Linux 系统中运行的线程代码 D. Intel 线程检查器可以发现数据竞争现象第 3 章:Intel 多核处理器上的性能调优方法习题 1.独立于体系结构性能优化方法主要有:(BCD ) A. 编写适用于特定 CPU 的优化代码 B. 避免冗余的函数调用 C. 避免不必要的边界检查 D. 利用局部变量保存中间计算结果 2.以下不是阻碍优化的因素有:(D ) A. 编译优化选项 B. 变量别名 C. 函数调用的边际效应 D. 源文件的大小 3.使用-O3 编译选项所得的程序,执行效率比使用-O2 编译选项所得的程序_
19、。(D ) A. 高 B. 低 C. 一样 D. 不一定 4. 对于函数调用的边际效应,以下表述不正确的是:(B) A. 只要函数在调用的过程中改变了某些全局变量的值,我们就称函数调用中有边际效应。 B. 存在边际效应的函数调用,其调用次数的不同会对整个程序的行为产生不同的影响。 C. 为了避免函数调用的边际效应,就必须尽量避免使用全局变量,尽量使用局部变量。 D. 编译器无法检测出函数调用中是否会产生边际效应,所以应该将函数调用移出循环体外。5. 对于一个优化的编译器,以下表述不正确的是:(D ) A. 编译器负责其中的寄存器分配的优化 B. 编译器负责其中的代码选择及有限重组的优化 C.
20、编译器进行一些局部范围内的优化D. 优化的编译器能够改进算法的计算复杂度 6. 对于现代微处理器体系结构而言,对性能优化影响比较大的主要是:(ACD ) A. 超标量 B. 扩展指令集 C. 乱序执行 D. 指令流水线的深度 7. 对于通过加深流水线的深度的办法来提升时钟频率,从而提高整个处理器性能的做法,以下表述正确的是:(AC ) A. 如果指令流是完全规则的顺序执行,则程序的性能会非常高 B. 对于指令跳转、条件转移指令,流水线也有很好的性能 C. 单一的以时钟频率作为划分处理器性能的标志也有利于市场化的宣传 D. 对于错误的条件转移预测,深度流水线能够更快地从错误中恢复 8.关于 CI
21、SC,以下表述不正确的是:(D ) A. CISC 的全称是 Complex Instruction Set Computer B. 在 CISC 微处理器中,程序的各条指令是按顺序串行执行的,每条指令中的各个操作也 是按顺序串行执行的 C. 顺序执行的优点是控制简单,但计算机各部分的利用率不高,执行速度慢 D. 其代表产品是 Intel 生产的 x86 系列 CPU 及其兼容 CPU 以及 MIPS 处理器 9.关于 RISC,以下表述不正确的是:(B) A. RISC 的全称是 Reduced Instruction Set Computing B. CISC 是在 RISC 指令系统基础
22、上发展起来的 C. RISC 的指令格式统一,种类比较少,寻址方式也比复杂指令集少 D. RISC 型 CPU 与 Intel 和 AMD 的 CPU 在软件和硬件上都不兼容 10.以下表述不正确的是:(C) A. 超标量是通过内置多条流水线来同时执行多个处理器,其实质是以空间换取时间。 B. 超流水线是通过细化流水、提高主频,使得在一个机器周期内完成一个甚至多个操作, 其实质是以时间换取空间。 C. 将流水线设计的步(级)越长,其完成一条指令的速度越慢 D. 流水线过长也带来了一定副作用,很可能会出现主频较高的 CPU 实际运算速度较低的现 象 11.对于乱序执行,以下表述不正确的是:(C)
23、 A. 乱序执行是指 CPU 允许将多条指令不按程序规定的顺序分开发送给各相应电路单元处 理的技术 B. 采用乱序执行技术的目的是为了使 CPU 内部电路满负荷运转并相应提高了 CPU 的运行程序的速度 C. 乱序执行的指令没有任何规定的顺序 D. 指令进行运算时需要等待结果,一般无条件分枝只需要按指令顺序执行,而条件分枝必 须根据处理后的结果,再决定是否按原先顺序进行12.以下表述不正确的是:(C) A. 编译时的选项-O2 就是二级优化,-O 是一般优化,-O0 是不优化 B. 二级优化是编译器在一般优化基础上再做第二次优化 C. 越高级的优化,生成的可执行文件的执行效率可以更高,但是,编
24、译、连接的速度就相应地要慢一些 D. 更高级的优化可能导致计算结果不正确 13. 以下表述不正确的是:(AD ) A. Intel 宽度动态执行技术包括了 16 级的有效流水线,具有更宽的解码带宽,更强的指令跳转预测,更宽的执行路径,全面支持 64-bit B. Intel 高级内存存取技术改进了转移预测机制,高级数据预取机制 C. Intel 高级智能缓存技术使得 cache 可以在双核之间共享,而且双核对于整个 cache 都具有完全存取权限 D. Intel 高级数字媒体促进技术中高带宽 SSE 技术,每周期可执行 16 个单精度浮点操作或者 8 个双精度浮点操作 14.对于 Intel
25、 处理器的优化技术,以下表述不正确的是:(CD ) A. 指令队列中包括了一个循环检测器,避免了将循环体中的指令重复解码,提高了指令流 执行带宽 B. 取指和预解码的优化措施主要影响的是那些带有立即数或者直接偏移的指令,包括操作 数大小重载前缀(Operand Size Override (66H))以及地址大小重载前缀(Address Size Override(67H)) C. 解码器每个时钟周期至多可产生 8 条微操作 D. 以上都正确 15. 一个优化的编译器一般来说_改进算法的计算复杂度,编译器能进行_因子的改进。(D) A.可以,指数 B.可以,常数 C.不能,指数 D.不能,常数
26、 16. 编译器保证在任何极端的情况下_都不能发生任何改变。(D) A. 程序的行为 B. 程序的全局状态 C. 程序的全局变量的值 D. 以上都是 17. 编译器所能作的优化一般是哪些类型的优化。(AB ) A. 函数/过程调用内部 B. 过程间 C. 全局范围的优化 D. 以上都是18. 对于通过提升时钟频率来提高性能的方法来说,以下哪个是致命的问题。(C) A. 能量消耗 B. 能量泄露 C. 这两个都是 D. 这两个都不是 19. 随着时钟频率的上升,当超过某个阈值的时候,处理器的能量消耗_ 。(A ) A. 成指数上升趋势 B. 成线性上升趋势 C. 不变 D. 成线性下降趋势20.
27、 Intel 处理器的优化技术中,每个时钟周期至多可以有_条微操作同时被发射到执行核心。(C) A.4 B.5 C.6 D.7 第 4 章:多线程编程方法综述习题 1.以下表述正确的是:(BD) A. 通过提高时钟频率来太提升性能的方法始终有效 B. 单个芯片上可以集成的引脚(pin )数目以及带宽限制使处理器与内存性能之间的差异越来越大 C. 每当出现一代新的体系结构平台,原有的程序无需修改,或者只需很少的修改,就可以 轻而易举的获得由摩尔定律所带来的性能提 D. 使用多线程技术,充分利用单个芯片上的多个计算核心,可以提高程序整体的计算吞吐 量 2. 对于进程,以下表述不正确的是:(D )
28、A. 进程是指程序在一个数据集合上运行的过程 B. 进程是系统进行资源分配和调度运行的一个独立单位 C. 在操作系统中引入进程的目的,是为了使多个程序并发执行,以改善资源利用率及提高 系统的吞吐量 D. 在操作系统中引入进程的目的,是为了减少程序并发执行时所付出的时空开销,使操作 系统具有更好的并发性 3. 对于线程,以下表述不正确的是:(C) A. 线程是进程中的一个实体,是被系统调度和分配的基本单元 B. 每个程序至少包含一个线程,那就是主线程 C. 线程自己只拥有很少的系统资源,且不可与同属一个进程的其他线程共享所属进程所拥 有的全部资源D. 同一进程中的多个线程之间可以并发执行,从而更
29、好地改善了系统资源的利用率 4. 以下表述不正确的是:(C) A. 人们习惯上称线程为轻量级进程(lightweight process, LWP ),线程是 CPU 调度和分派的基本单元 B. 在创建或撤消进程时,系统都要为之分配或回收资源 C. 进程切换的开销也远小于线程切换的开销 D. 线程切换只需保存和设置少量寄存器的内容,并不涉及存储器管理方面的操作 5.以下表述不正确的是:(D ) A. 在传统的操作系统中,CPU 调度和分派的基本单位是进程 B. 在引入线程的操作系统中,则把线程作为 CPU 调度和分派的基本单位 C. 同一进程中线程的切换不会引起进程切换,从而避免了昂贵的系统调
30、用 D. 由一个进程中的线程切换到另一进程中的线程时,也不会引起进程切换 6.以下表述正确的是:(AC ) A. 在引入线程的操作系统中,进程之间可以并发执行 B. 在引入线程的操作系统中,一个进程中的多个线程之间不可以并发执行 C. 进程是拥有系统资源的一个独立单位,它可以拥有自己的资源 D. 线程是拥有系统资源的一个独立单位,它可以拥有自己的资源 7.以下表述不正确的是:(A ) A. 用户级线程在用户层通过线程库来实现。对它的创建、撤销和切换都要利用系统的调用。B. 核心级线程由操作系统直接支持,即无论是在用户进程中的线程,还是系统进程中的线 程,它们的创建、撤消和切换都由核心实现 C.
31、 硬件线程就是线程在硬件执行资源上的表现形式 D. 用户级线程通过操作系统被作为核心级线程实现,再通过硬件相应的接口作为硬件线程 来执行 8. 以下表述不正确的是:(B) A. 对用户级线程来讲,内核也并不知道它的存在,所以所有对用户级线程的管理和调度都 是在用户空间来进行的 B. 用户级线程的切换需要通过中断进入操作系统的内核 C. 如果内核是单线程的,那么任何一个用户级线程若执行了阻塞系统调用就会导致该线程 所属的进程阻塞 D. 如果采用的是内核级线程,当一个线程被阻塞,该进程中的线程不会被阻塞。 9. 对于线程生命周期,以下表述正确的是:(D ) A. 系统中的每个线程都有一个从创建到消
32、亡的过程,我们把这一过程称作该线程的生命周 期。 B. 线程生命周期包括创建、就绪状态、运行状态、等待状态和消亡 C. 就绪状态的线程运行所需的一切条件都得到满足,已获得必要的资源和设备。但因处理 器资源个数少于线程个数,所以该线程不能运行,而必须位于队列中等待分配处理器资源 D. 以上都正确10. 以下表述不正确的是:(C) A. 当两个或多个进程试图在同一时刻访问共享内存,或读写某些共享数据,就会产生竞争 条件 B. 每个临界区都有相应的进入区(entry section)和退出区(exit section) C. 可能有两个线程同时进入临界区 D. 临界区的存在就是为了保证当有一个线程在
33、临界区内执行的时候,不能有其他任何进程 被允许在临界区执行 11. 对于信号量,以下表述不正确的是:(B) A. 信号量有两个基本的原子操作:P (wait, 检测操作)和 V (signal,增量操作)。 B. 信号量在并行进程开始执行前,信号量被初始化负数。 C. 信号量为正表示可无阻塞执行的线程的数目,为负则表示已经被阻塞的线程数。 D. 当信号量为 0 时则表示没有等待的线程 12. 对于锁,以下表述不正确的是:(D ) A. 锁类似于信号量,不同之处在于在同一时刻只能使用一个锁 B. 锁有两个操作,分别是获取锁和释放锁。 C. 互斥量是一种锁,线程对共享资源进行访问之前必须先获得锁;
34、否则线程将保持等待状 态,直到该锁可用。 D. 若线程不主动放弃锁,其他线程可以抢占它 13. 对于条件变量,以下表述正确的是:(ABC ) A. 条件变量(Condition variable)是用来通知共享数据状态信息的 B. 当特定条件满足时,线程等待或者唤醒其他合作线程 C. 条件变量需要一个互斥量来同步对共享数据的访问 D. 条件变量提供互斥 14. 对于线程局部存储 TLS(thread local storage),以下表述正确的是:(ABCD ) A. 解决多线程中的对同一变量的访问冲突的一种技术 B. TLS 会为每一个线程维护一个和该线程绑定的变量的副本 C. 每一个线程都
35、拥有自己的变量副本,从而也就没有必要对该变量进行同步了 D. Java 平台的 java.lang.ThreadLocal 是 TLS 技术的一种实现 15.以下表述不正确的是:(D) A. 在普通的同步机制中,是通过对象加锁来实现多个线程对同一变量的安全访问的 B. ThreadLocal 会为每一个线程维护一个和该线程绑定的变量的副本,从而隔离了多个线程的数据,每一个线程都拥有自己的变量副本,从而也就没有必要对该变量进行同步了。 C. ThreadLocal 提供了线程安全的共享对象,在编写多线程代码时,可以把不安全的整个变量封装进 ThreadLocal,或者把该对象的特定于线程的状态封
36、装进 ThreadLocal D. 使用 ThreadLocal 的多个线程也会共享资源 16. 对于客户/服务器模型中,以下表述正确的是:(ABCD ) A. 线程编程流水线模型中,“数据元素”流串行地被一组线程顺序处理。每个线程依次在该数据上执行自身特定的操作,并将执行结果传递给流水线中的下一个线程。 B. 线程编程工作组模型中,数据由一组线程独立地处理 C. 线程编程客户/服务器模型中,客户请求服务器对一组数据执行某个操作 D. 线程编程客户/服务器模型中,服务器独立的执行操作 客户端或者等待服务器执行, 或者并行地执行并在后面需要时查找结果 17.以下表述不正确的是:(A ) A. 多
37、核 CPU 机器上的编程和多 CPU 上的编程应该差不多,只要借鉴以前的多任务编程、 并行编程和并行算法方面的经验就足够了 B. 多核 CPU 中,要很好地发挥出多个 CPU 的性能的话,必须保证分配到各个 CPU 上的任 务有一个很好的负载平衡 C. 要实现一个好的负载平衡通常有两种方案,一种是静态负载平衡,另外一种是动态负载 平衡 D. PC 上的客户端软件要想发挥出多核的并行优势并不像进行大型并行计算的特定领域那样简单 18. 对于负载平衡,以下表述不正确的是:(C) A. 静态负载平衡需要人工将程序分割成多个可并行执行的部分,并且要保证分割成的各个 部分能够均衡地分布到各个 CPU 上
38、运行 B. 动态负载平衡是在程序的运行过程中来进行任务的分配达到负载平衡的目的 C. 动态负载平衡中对任务的调度可以由系统来实现,也可以由程序员修改调度策略 D. 由于实际任务中存在很多的不确定因素,调度算法无法做得很优,因此动态负载平衡有 时可能达不到既定的负载平衡要求 19. 对于负载平衡,以下表述正确的是:(C) A. 使用负载平衡,随着 CPU 核数的增多总能让总的执行时间下降,从而使加速系数随 CPU 核数的增加而增加 B. 负载平衡的困难之处在于程序中的可并行执行块很多要靠程序员来划分,随着核数的增 加,这项任务将会变得不可能 C. 负载划分的误差并不会会随着 CPU 核数的增加而
39、放大 D. 负载划分的难题还体现在 CPU 和软件的升级上 20. 对于如何解决串行化方面的难题,以下表述正确的是:(ABC ) A. 少用锁,甚至采用无锁编程 B. 使用原子操作来替代锁 C. 从设计和算法层面来缩小串行化所占的比例 D. 设计并行指令 21. 在操作系统中引入进程的目的是:(A ) A. 提高系统吞吐量 B. 减少程序并发执行时所付出的时空开销 C. 便于组织程序逻辑 D. 以上都正确22. 在操作系统中引入线程的目的是:(B ) A. 提高系统吞吐量 B. 减少程序并发执行时所付出的时空开销 C. 便于组织程序逻辑 D. 以上都正确 23._是 CPU 调度和分派的基本单
40、位,_是资源拥有的基本单位。(D) A. 线程,线程 B. 进程,线程 C. 进程,进程 D. 线程,进程 24. 线程在不同的操作系统中还有不同的实现方式有:(D) A. 用户级线程 B. 核心级线程 C. 硬件线程 D. 以上都是 25. 同一进程的两个线程_访问对方的虚拟地址空间,不同进程的两个线程_访问 对方的虚拟地址空间。(C) A. 可以,可以 B. 不可以,不可以 C. 可以,不可以 D. 不可以,可以 第 5 章:多线程程序设计中的常见问题及解决途径习题 1.以下表述不正确的是:(A ) A. 使用多线程能够提升程序的性能,如果少量的线程能够提升程序的性能,那么更多的线 程能够
41、更好 B. 过多的线程可能会严重影响程序的性能 C. 将给定的工作量划分给过多的线程会造成每个线程的工作量过少,因此可能导致线程启动和终止时的开销比程序实际工作的开销还要多 D. 过多并发线程的存在将导致共享有限硬件资源的开销增大 2.以下表述不正确的是:(A ) A. 进程是操作系统分配处理器时间的基本单元 B. 线程上下文包括为使线程在线程的宿主进程地址空间中无缝地继续执行所需的所有信息 C. 当软件线程个数超过硬件线程个数的时候,支持抢占式多任务处理的操作系统一般会采 用时间片轮转调度的方案 D. 时间片的长度取决于操作系统和处理器。由于每个时间片都很小,因此即使只有一个处 理器,多个线
42、程看起来似乎也是在同时执行 3.对于进程间切换,以下表述不正确的是:(C)A. 在系统要进行进程间切换的时候,需要保存当前进程的寄存器状态,以便在下次回调到 当前线程的时候,能够恢复线程寄存器继续运行 B. 当存在少量线程的时候,进程调度程序会给每一个线程分配足够长的时间片,保存和恢 复线程寄存器的开销变得不是很显著 C.随着线程数目的增加,虽然线程调度程序分给每个线程的时间片也会相应减少, 但是不会降低系统性能。 D.保存和恢复线程使用的 cache 的开销则是更敏感的一种开销 4.对于操作系统中的线程,以下表述不正确的是:(D ) A. 操作系统中存在两种类型的线程,I/O 阻塞线程和计算
43、非阻塞线程 B. IO 阻塞线程主要用于有交互式的程序中,它在大多数时间内都在等待外部事件 C. 计算非阻塞线程在大多数时间内都是被调度函数调度到的,应该和处理器资源相匹配 D.在处理 IO 阻塞线程的时候要依次地等待每个请求完成才继续处理下一个请求 5. I/O 阻塞线程 _引起时间片切换开销,计算非阻塞线程_引起时间片切换的开销。 (A ) A.不会,会 B.会,不会 C.都会 D.都不会 6.以下表述错误的是:(D) A. OpenMP 可以根据目标系统尽量使用最优数量的线程个数 B. 使用线程池可以避免为每个线程创建新进程的开销 C. 线程池通常具有最大线程数限制,如果所有线程都繁忙,
44、而额外的任务将放入队列中, 直到有线程可用时才能够得到处理 D.对于有优先级的线程,也可以使用线程池 7.对于可重入函数,以下表述不正确的是:(C) A. 一个可重入的函数在执行中并不使用静态数据,也不返回指向静态数据的指针 B. 所有使用到的数据都由函数的调用者提供 C. 可重入函数在函数体内可以调用非可重入函数 D. 一个非可重入函数通常(尽管不是所有情况下) 由它的外部接口和使用方法即可进行判断 8. 死锁发生必须同时满足以下条件:(ABCD ) A. 互斥 B. 占有并等待 C. 非抢占 D. 循环等待 9.以下表述不正确的是:(B ) A. 由于多个线程共享资源,在采用基于优先级调度
45、策略时会出现较低优先级的线程先于高 优先级线程执行的情况 B. 优先级倒置可能使实时性要求低的线程错过临界期限 (critical deadline ),从而导致系统崩溃 C. 要避免出现优先级倒置问题,必须让低优先级线程尽快释放临界资源 D. 目前解决优先级倒置通常有两种方法,一种是优先级继承(priority inheritance ),另一种是优先级顶置 (priority ceilings )10. 如果一个线程占有资源并申请另一个不能立即分配的资源,那么其现在已分配的资源 _ 。抢占资源分配到_资源的链表上。(D) A. 保持不变,当前 B. 保持不变,所等待 C. 被抢占,当前 D
46、. 被抢占,所等待 11.以下表述不正确的是:(D) A. 优先级继承技术强令低优先级的线程继承与之共享资源并被挂起的高优先级线程的优先级 B. 一旦高优先级线程开始挂起,即可实施优先级继承,直到资源释放 C. 采用优先级继承方法可以有效地解决优先权倒置的问题 D. 优先级继承方法中动态改变线程的优先级并不对程序性能造成影响 12.以下表述不正确的是:(C) A. 优先级顶置方案的目的是让低优先级线程尽快释放临界资源 B. 优先级顶置方法总是乐于提高线程的优先级,而优先级继承方法则比较懒惰,不到万不 得已不会提升线程的优先级 C. Windows 互斥量机制默认支持优先级顶置的方法 D. 对于
47、使用锁或者忙等待机制的编程人员来说,如果有不同优先级的线程被允许获取锁, 就会遇到优先级倒置问题 13.以下表述不正确的是:(AD) A. 在遇到锁竞争激烈的时候,就需要一个更快的锁 B. 可以通过复制资源的方式来避免使用锁 C. 减少对锁的等待时间的最有效方法是减少这个锁所保护的范围大小 D. 向一个散列表中插入数据的时候,使用一个锁对散列加锁和使用散列函数将关键字映射 到一个子表,然后线程取得这个子表的锁的效果是一样的 14.以下表述不正确的是:(B) A. 如果一个数据结构读取频繁但是写入并不频繁,就可以使用读写锁(reader-writer lock)来解决竞争 B. 一个线程可以同时
48、持有读线程锁和写线程锁 C. 读线程和写线程将分别排入各自的队列,锁在一组读线程和一个写线程之间交替进行操作 D. 大多数获取锁的方法都采用超时值。使用超时可以避免应用程序中出现死锁 15. 非阻塞算法具有以下一些特征:(ABD ) A.无阻塞 B.无锁 C.无互斥 D.无等待 16.以下表述不正确的是:(C) A. 非阻塞算法会导致大量的存储总线流量,因为不同的硬件线程会不断试图对同一 cache 线进行操作。 B. 如果将锁竞争分布到多个锁上,并且每个锁都能够保证在其线程完成操作之前没有线程 能够访问它所保护的 cache 线,那么有锁的算法就比等价的非阻塞算法性能好 C. 有锁算法一定比非阻塞算法好 D. 使用一个快速的循环锁保护一个不含原子操作的临界段,与需要三个或更多高竞争度原 子操作的非阻塞实现方式相比较而言,性能要好一些 17. 对用户级线程来讲,内核_它的存在,所以所有对用户级线程的管理和调度都是在_空间来进行的。(C) A. 知道,用户 B. 知道,内核 C. 不知道,用户 D. 不知道,内核 18.以下表述错误的是:(D) A. 对于一个串行程序任一时刻的任一运行副本来说,存储器都有一个良定(well de