多线程概念
1.线程是一个执行分支,执行粒度比进程更细,调度成本更低
2.线程是进程内部的一个执行流
3.线程是CPU调度的基本单位,进程是承担分配系统资源的基本实体
什么是多线程
创建子进程时,只创建PCB,创建出来的PCB继续指向父进程的地址空间
代码区假设有很多函数存在,让不同的PCB执行不同的函数
相当于在一个进程内部包含多个执行流,指向同一个进程内的不同代码区域
每个PCB都是单独的线程
线程在地址空间内运行,所以该线程属于进程
调度成本低
多个线程之间使用的是同一个地址空间和页表
若为新的进程,则还需再次找到新的地址空间和页表并进行切换
局部性原理
CPU内部存在一个硬件cache
把一部分数据预先加载到缓冲区里,提高整机的效率
如CPU正在访问第100行代码,未来有很大概率访问101行,
所以一旦访问到第100行就把100行附近的数据全部load到内存中或者CPU的cache中
若进行线程切换,因为都属于同一个进程,cache中缓存的数据是不变的
若进行进程切换,把当前缓存的数据设为失效,cache要重新加载当前的代码和数据
调度成本更低,体现在不用对cache进行切换
线程缺点
1. 性能损失
创建过多的线程,只有少数在运行,大多数的线程来回被调度 造成性能损失 即多线程创建不合理
2.健壮性降低
如果一个线程出现问题,可能会对整个进程造成影响
3.缺乏访问控制
每个执行流通过同一个地址空间看到的资源是相同的