Linux软件编程:进程线程(线程)
一、基本概念:线程是一个轻量级的进程
- 线程本质就是一个进程
- 线程和进程不完全一致,轻量指空间,进程空间和线程空间管理方法不同
二、进程和线程区别
1.线程本质是进程,线程是任务创建、调度和回收的过程
2.进程空间:文本段+数据段+系统数据段
3.进程空间
- 线程必须位于进程空间内部,没有进程,线程无法独立
- 一个进程的所有线程共享文本段+数据段+堆区,独享栈区
- 线程独享的栈区默认为8MB
- 一个进程中的多个线程切换调度任务时,资源开销较小
4.进程和线程区别
- 线程是CPU任务调度的最小单元
- 进程是操作系统资源分配的最小单元
三、多进程和多线程的优缺点
1.多线程和多进程对比
场景 | 多进程 | 多线程 | 对比 |
效率 | 多进程切换需要重新映射物理地址,占用资源开销大 | 多线程在同一进程空间内部切换任务,占用资源开销较小 | 多线程>多进程 |
通信 | 多进程没有共享空间,需要使用进程间通信的方法来完成通信 | 多线程有共享空间,只需定义共享空间变量完成数据交换即可实现通信 | 多线程>多进程 |
资源竞争 | 多进程没有共享空间,不存在资源竞争 | 多线程使用共享空间通信,需要保证资源使用的互斥性,防止多线程对共享资源产生竞争 | 多进程>多线程 |
安全 | 多进程空间独立,一个进程的奔溃不会影响其余进程 | 多线程共用一个进程空间,一个线程异常奔溃,可能引发进程异常退出,导致其余线程也无法执行 | 多进程>多线程 |
四、线程的调度:与进程调度保持一致(宏观并行,微观串行)
五、线程的消亡:线程结束需要回收线程空间,否则产生僵尸线程
六、线程的函数接口
进程接口 | 线程接口 |
fork | pthread_create |
exit | pthread_exit |
wait | pthread_join |
1.ptnread_create
2.ptnread_self
3.ptnread_exit
4.ptnread_join
注意
- tid对应的线程只有不退出,pthread_join阻塞等待结束回收线程空间
- pthread_join具备同步功能