- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
为什么要线程
第4讲 线程 什么是线程? 为什么要线程? 从编程角度如何看待线程? 23 线程定义 线程是比进程更小的活动单位,它是进程中的一个执行 路径。 线程可以这样来描述 进程中的一条执行路径; 它有自己私用的堆栈和处理机执行环境 ; 它与父进程共享分配给父进程的主存; 它是单个进程所创建的许多个同时存在的线程中的 一个,这些线程共享该进程的资源 * 进程与线程 进程 资源分配单位 进程的上下文组成 进程控制块PCB:包括进程的编号、状态、优先级以及正文段和数据段中数据分布的大概情况 正文段(text segment):存放该进程的可执行代码 数据段(data segment):存放进程静态产生的数据结构 用户堆栈(stack) 线程 CPU调度基本单位 * 线程与进程的关系 线程维护的信息 堆栈指针 寄存器 调度属性 信号 线程私有数据 * 没有线程 进程是拥有资源的基本单位,也是独立调度、分派的基本单位 有线程 进程是拥有资源的基本单位,不再是调度单位,线程为独立调度、分派的基本单位 第4讲 线程 什么是线程? 为什么要线程? 从编程角度如何看待线程? 24 线程的特点 创建一个线程比创建一个进程开销要小得多; 实现线程间通信十分方便,因为一个进程创建的多个 线程可以共享地址区域和数据。 在进程内创建多线程,可以提高系统的并行处理能力,加快进程的处理速度。 为什么需要线程? 第4讲 线程 什么是线程? 为什么要线程? 从编程角度如何看待线程? 用户线程 内核线程 * 用户线程 用户线程存在于用户空间,通过线程库来实现,内核不知道线程的存在(即没有相应的数据结构) 线程库提供对线程的创建、调度和管理的支持,而无须内核支持 对于用户级线程,其调度是以进程为单位的 优点 同一进程内的线程切换不需要转换到内核,调度算法是进程专用的 缺点 系统调度阻塞问题,不能充分利用多处理器 * 内核线程 由操作系统直接支持,内核在其空间内执行线程的创建、调度和管理 由于线程管理由操作系统完成,因此内核线程的创建和管理要慢于用户线程的创建和管理 优点 支持多处理器,支持用户进程中的多线程、内核线程切换的速度快 缺点 对用户的线程切换来说,系统开销大 * Linux的用户线程 Pthread线程库 Linux内核线程 特殊进程代替 * Linux用户线程的创建 函数调用形式 int clone(int (*fn)(void * arg), void *stack, int flags, void * arg); int?pthread_create(pthread_t?*restrict?tidp, const pthread_attr_t *restrict?attr, void *(*start_rtn)(void), void?*restrict?arg); tidp:新线程的线程描述表指针 attr:为新线程定义不同属性(如栈尺寸)默认为NULL 第三个和第四个参数指定执行的函数start_rtn和传递给函数的参数arg 两者区别 clone()创建内核支持的用户线程,对内核可见且由内核调度 pthread_create()由基于POSIX标准的线程库创建的用户线程 但在Linux里, pthread_create()最终调用clone()实现 * pthread介绍 基于POSIX标准的线程编程接口 包括一个pthread.h头文件和一个线程库 编译方法 gcc –g **.c -o *** –lpthread 功能 提供函数和变量共编程者使用 线程控制 线程之间的同步与互斥 线程属性 线程控制 线程的创建 线程撤销 线程等待 线程唤醒 25 1. 进程控制的概念 进程控制的职责 对系统中的进程实施有效的管理,负责进程状态的改变。 进程状态变化: 进程及进程管理——进程控制 创建 撤销 无 有 消亡 等待 运行 等待 唤醒 就绪 等待 常用的进程控制原语 创建原语、撤消原语、阻塞原语、唤醒原语 进程的生命周期围绕系统调用 1.fork()。它通过复制调用进程来建立新的进程 2.exec。它包括一系列的系统调用,其中每个系统调用都完成相同的功能,即通过用个新的程序覆盖原内存空间,来实现进程的转变。各种exec系统调用之间的区别仅在于们的参数构造不同。 3.wait()。它提供了初级的进程同步措施,它能使一个进程等待,直到另一个进程结为止。 4.exit()。这个系统调用常用来终止一个进程的运行。 * 线程创建 函数原型 int?pthread_create(pthread_t?*thread, const?pt
原创力文档


文档评论(0)