线程的概念:
- LWP:light weight process 轻量级的进程,本质仍是进程(linux环境下)
- 进程:独立地址空间,拥有PCB
- 线程:无独立地址空间,拥有PCB
- 区别:在于是否共享地址空间。 共享(线程) 私有(进程)
linux下:
- 线程:最小的执行单位 进程:最小分配资源单位,可以看成只有一个线程的进程
linux内核线程实现原理:
- 轻量级进程,也有PCB,创建线程使用的底层函数和进程一样,都是clone
- 从内核量看进程和线程是一样的,都有各自不同的PCB,但是PCB中指向内存资源的三级页表是相同的
- 进程可以蜕变为线程
- 线程可以看做寄存器和栈的集合
线程共享资源
- 文件描述符表
- 每种信号的处理方式
- 当前工作目录
- 用户ID和组ID
- 内存地址空间(.text/.data/.bss/heap/共享库)
线程非共享资源
- 线程ID
- 处理器现场和栈指针(内核栈)
- 独立的栈空间(用户空间栈)
- errno变量
- 信号屏蔽字
- 调度优先级
线程优缺点
- 优点:提高程序并发性、开销小、数据通信共享数据方便
- 缺点:库函数不稳定、调试、编写困难、gdb不支持、对信号支持差