1 / 39
文档名称:

多核程序设计:第三章 线程的基本概念.ppt

格式:ppt   大小:1,785KB   页数:39页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

多核程序设计:第三章 线程的基本概念.ppt

上传人:窝窝爱蛋蛋 2022/8/3 文件大小:1.74 MB

下载得到文件列表

多核程序设计:第三章 线程的基本概念.ppt

文档介绍

文档介绍:*
第三章 线程的基本概念
小节
章节
重点内容

多线程的概念
进程?线程?多线程机制的优势?

用户级线程和内核级线程
谁来管理多线程?

多线程的映射模型
用户级线程  内核级线程
3程切换不需进入操作系统,因而实现效率较高;
有关线程的所有管理工作都由在用户级实现的线程库来支持。
用户级别线程缺点:
同一进程中的多个线程不能真正并行;
由于线程对操作系统不可见,调度在进程级别,某进程中的一个线程通过系统调用进入操作系统受阻,该进程的其它线程也不能运行 。
*
内核级线程
内核级线程
内核级线程的所有管理操作都是由操作系统内核完成的
特点
并行性高,
多个线程可被同时调度
充分利用多处理器
创建和管理代价高
*
内核级线程
核心级别线程的优点是并发性好,在多CPU环境中同一进程中的多个线程可以真正并行执行
核心级别线程的缺点是线程控制和状态转换需要进入操作系统完成,系统开销比较大.
*
*
多线程的映射模型
对于实现了用户级线程和内核级线程的操作系统,用户级线程和内核级线程之间的可以有不同的映射方式:
*

多对一模型
多对一模型把多个用户级线程映射到一个内核级线程。
用户级线程的管理在用户空间实现,所以效率高。
当一个线程因调用系统调用被阻塞时,整个进程被阻塞。另外,用户级线程不能在多处理器上并发执行,不支持内核级线程的操作系统使用多对一模型。
一对一模型
一对一模型把每个用户级线程映射到一个内核级线程(纯核心级线程) 。
当一个线程阻塞时,其他线程仍然可以运行。
内核资源会限制系统中线程的数目。
例如:Windows 95/98/NT/2000,OS/2
*
多对多模型
多对多模型将m个用户级线程映射到n个内核级线程,m≥n。
用户可以创建所需要的用户级线程,通过分配适当数目的内核级线程获得并发执行的优势并节省系统资源。
例如:
Solaris 2
*
线程池
多线程编程的问题
重复创建和销毁线程,如:网络服务器,长时间重复该过程要耗费大量的处理器时间
为每个请求创建一个线程,大量的创建线程可能会耗尽系统资源
解决方式:线程池
一组被创建的线程的集合,需要线程时从池中取出,使用结束后归还线程池。当线程池中没有可用线程时,创建线程的请求必须等待,保护系统资源不被耗尽。
线程池中的线程数目可以依据系统的内存、处理器数目、待处理的任务数目来确定,或者动态地依据系统当前资源和系统负载进行调整。
*
*
线程的生命周期
线程的标识
通常用一个整数来标识一个线程
在Pthred线程库中,以pthread_t类型来标识一个线程。
线程的创建(c程序)
首先运行的是从main函数开始的主线程或初始线程
在pthread函数库中调用pthread_create创建一个新的线程
线程的终止
线程的启动函数执行完毕,或者调用了pthread_exit 导致线程终止
主线程退出导致整个进程会终止 ,主线程一般会在其它线程退出后再结束。
线程的状态
线程的状态
就绪(ready):线程等待可用的处理器。
运行(running):线程正在被执行。
阻塞(blocked):线程正在等待某个事件的发生(比如I/O的完成,试图加锁一个被上锁的互斥量)。
终止(terminated):线程从起始函数中返回或者调用pthread_exit。
*
线程状态的转换
*

*
单线程环境下的进程控制接口在多线程环境下语义可能会发生变化,包括进程创建、进程终止、进程执行、信号处理等操作。
进程创建
创建进程的系统调用完成后,被创建的新进程复制调用进程的内容,当进程的一个线程中创建一个子进程,新的进程可以复制整个进程(包括所有线程)也可以只复制调用线程的内容;
执行新的程序
在进程中执行新的程序,函数的语义在多线程环境下没有发生大的变化。Exec将会终止所有的线程,用新的程序覆盖进程的地址空间,并开始执行新的程序;

*
进程结束
在任何一个线程中调用exit将会结束整个进程,另外从主线程返回也等同于调用exit而导致进程结束。如果要从线程中退出则调用专用的线程退出函数。
信号处理
信号是unix中系统通知进程的重要机制。信号可能是同步的也可能是异步的。发送给进程的信号在多线程环境下有多种选择:
--发送给引发信号的线程;
--发送给所有的线程;
--发送给特定的线程;
--指定一个线程处理所有的信号。
如何递送一个信号取决于信号的类型。
*
线程的同步
由于线程共享同一进程的内存空间,多个线程可能需要同