1. 线程的概念
LWP: light wight process,轻量级进程,本质还是进程(在Linux环境下)
进程:独立地址空间,拥有PCB
线程:也有PCB,但没有独立的地址空间(共享)
区别:在于是否共享地址空间
Linux下: 进程:最小的执行单位
线程:最小分配资源单元,可看成是只有一个进程的线程
2. Linux线程实现原理
1、轻量级线程也有PCB,创建线程使用的底层函数和进程一样,都是clone
2、从内核里看进程和线程是一样的,都有各自不同的PCB,但是PCB中指向内存资源的三级页表示相同的,
3、进程可以蜕变成线程
4、线程可看做寄存器和栈的结合
5、在Linux下,线程是最小的执行单位,进程是最小的资源分配单位。
查看LWP号
ps -lf pid 查看指定进程的lwp号
ps –aux 看进程
ps –eLf 看线程
ps –Lw pid 查看某一个进程的线程有那些
firefox使用多线程的方式实现的
chrome使用多进程的方式实现的
查看某一个进程的线程 ps -Lw xxx
3. 线程共享资源
1、文件描述符表
2、每种信号的处理方式
3、当前工作目录
4、用户ID和组ID
5、内存地址空间(Text/data/bss/堆/共享库)
4. 线程非共享资源
1.线程id
2.处理器现场和栈指针(内核栈)
3.独立的栈空间(用户空间栈)
4.errno变量
5.信号屏蔽字
6.调度优先级
5. 线程优缺点
优点:
提高程序的并发性
开销小,不用重新分配内存
通信和共享数据方便
缺点:
线程不稳定(库函数实现)
线程调试比较困难(gdb支持不好)
线程无法使用unix经典事件,例如信号