线程
基础概念:
线程相比进程的优点:
- 创建和销毁开销更小
- 调度的开销更小
- 线程占用资源更小 注:原因是:线程用同一个虚拟地址空间
线程相比进程的缺点:
- 性能损失
- 健壮性降低(核心问题):一个线程异常终止会导致进程异常终止(因为同一个虚拟地址空间,注意是进程终止)
- 编程难度增大:1)对线程的可靠性要求更高 2)线程安全问题
多线程/多进程应用场景:
1.CPU密集型
2.IO密集型
- a)通过网络进行输入输出----例如下载小说
- b)响应UI界面(界面显示,数据计算要多线程,因为防止数据计算太久了,界面卡死。)
线程之间的共用资源:
- 虚拟地址空间
- 文件描述符表
线程之间的不共用资源:
- 栈(函数调用栈,局部变量等)
- 上下文信息:(CPU中的寄存器)
- errno(错误码,每个线程有自己的 errno) 注:也像栈那样的包含
含义示例图:
1.线程也不是越多越好:达到一定数目就没法提升效率了
2.线程多了就会多个线程访问同一个资源,就会打架(互斥)。
3.某个线程得不到执行的机会,线程饥饿(同步)。
4.如果某个线程崩溃,异常终止,整个进程就异常终止。 注意是进程,也就是其他线程同样异常终止。