文章目录
目录
前言
- 线程是现代操作系统中实现并发执行的重要机制。在多处理器系统中,多个线程可以同时在不同的处理器核心上执行,充分利用硬件的并行性,提高系统的吞吐量。
- 对于单处理器系统,线程可以通过时分复用的方式,让用户感觉多个任务在同时进行。例如,在一个同时运行着文件下载、音乐播放和文本编辑的桌面操作系统中,这些任务可以分别由不同的线程来处理,操作系统通过合理地调度线程,使得每个任务都能得到适当的执行时间,从而提供了良好的用户体验。同时,线程也为软件开发者提供了一种更灵活的编程模型,方便他们实现复杂的并发算法和应用程序。
一、线程的概念
线程是进程内的执行分支。线程的执行分支是粒度,要比进程细。
1、如何理解线程
1、从执行角度理解线程
- 线程是进程内部的一条执行路径。可以把进程想象成一个工厂,而线程就是工厂里的工人。在这个工厂(进程)里有很多资源,如原材料(数据)、工具(文件描述符等资源),每个工人(线程)都可以使用这些资源来完成自己的工作任务。
2、从资源共享角度理解线程
- 线程共享进程的许多重要资源。这包括进程的地址空间,意味着所有线程可以访问进程中的全局变量和动态分配的内存。例如,在一个多线程的游戏程序中,多个线程可能共享游戏场景的数据结构,如地图信息、角色位置等。
3、从并发和并行角度理解线程
- 在单处理器系统中,线程通过时分复用的方式实现并发。就好像一个人(处理器)要同时做几件事情,他会快速地在不同任务(线程)之间切换。例如,在一个同时运行着文字处理软件和音乐播放软件的系统中,操作系统会快速地在这两个软件对应的线程之间切换,给用户造成一种两个软件同时运行的感觉。
4、从编程模型角度理解线程
- 对于程序员来说,线程提供了一种方便的方式来编写并发程序。通过创建多个线程,可以将一个复杂的任务分解成多个子任务,让这些子任务并发或并行地执行。
2、重新定义线程及进程
进程是资源分配的基本单位线程是调度的基本单位
线程共享进程数据,但也拥有自己的一部分数据:
线程ID一组寄存器栈
errno
信号屏蔽字调度优先级
进程的多个线程共享 同一地址空间,因此Text Segment、Data Segment都是共享的,如果定义一个函数,在各线程中都可以调用,如果定义一个全局变量,在各线程中都可以访问到,除此之外,各线程还共享以下进程资源和环境:
文件描述符表
每种信号的处理方式(SIG_ IGN、SIG_ DFL或者自定义的信号处理函数)当前工作目录
用户id和组id
关系图
这是我们当初学进程的地址空间的时候的图片,它是我们进程的基本内核,进程是有自己的task_struct的,然后task_struct指向我们的地址空间,地址空间一共4gb,3gb用户级空间,1gb内核空间,然后进程还有自己的页表,它是用来映射物理空间和虚拟地址之间的关系表。
而我们的多线程通过概念我们知道多线程每一个进程是分支,那么说多线程的单一线程在进程内部,那么我们的图就变成下图
线程是进程的一个分支是最小的单位 ,我们学习了线