1 线程的概念
-
什么是线程
Linux操作系统与Windows操作系统线程实现原理是不同的。 Linux操作系统中线程是依托进程实现的,在类UNIX早期没有线程的概念,一直到80年代才提出线程的概念。
-
LWP
light weight process轻量级的进程,本质仍是进程(在Linux环境下)
-
进程与线程
进程: 独立地址空间,拥有PCB 线程: 也有PCB,但没有独立的地址空间(共享) 区别:在于是否共享地址空间。独居(进程); 合租(线程) linux下: 线程: 最小的执行单位 进程: 最小分配资源单位,可看做只有一个线程的进程
-
linux内核线程实现原理
类Unix系统中,早期是没有"线程"概念的,80年代才引入,借助进程机制实现了线程的概念。因此这类系统中,进程和线程关系密切 1. 轻量级进程(light-weight process),也有PCB,创建线程使用的底层函数和进程一样,都是clone 2. 从内核里看进程和线程是一样的,都有各自不同的PCB,但是PCB中指向内存资源的三级页表是相同的 3. 进程可以蜕变成线程 4. 线程可看做寄存器和栈的集合 5. 在linux下,线程是最小的执行单位,进程是最小的分配资源单位 查看LWP号:ps -Lf pid 查看执行线程的lwp号 lwp(线程号): CPU分配时间轮片的依据
-
线程资源
共享资源 1.文件描述符表 2. 每种信号的处理方式 3. 当前工作目录 4. 用户ID和组ID 5. 内存地址空间(.text/.data/.bss/heap/共享库) 非共享资源 1. 线程ID 2. 处理器现场和栈指针(内核栈) 3. 独立的栈空间(用户栈空间),如函数运行的栈空间 4. errno变量 5. 信号屏蔽字 6. 调度优先级
-
线程的优、缺点
优点: 1. 提高程序并发性 2. 开销小 3. 数据通信、共享数据方便 缺点: 1. 库函数,不稳定 2. 调试、编写困难、gdb不支持 3. 对信号支持不好 优点相对突出,缺点均不是硬伤,Linux下由于实现方法导致进程、线程差别不是很大
2 线程的控制原语 ***
- 线程创建
实例 - 线程间共享全局变量
线程默认共享数据段,代码段等地址空间,常用的是全局变量。而进程不共享全局变量,只能借助mmap
3 线程的属性控制(扩展知识)
修改线程属性的方法