多线程
多线程的好处
- 多线程可以提高CPU的使用效率
- 比如单线程运行时遇到网络等待的耗时操作时,只能乖乖的等待,且交互终端
- 但是多线程的情况下,一个线程负责交互,另一个负责计算
线程的访问权限
- 知道哪些数据是线程私有,哪些变量是线程之间共享数据
线程调度和优先级
- 当线程数量小于处理器数量的时候就是真正的并发处理
- 当线程数量大于处理器数量的时候,是需要CPU模拟出来并发
主流的调度方法
- 优先级调度,且线程也拥有自己的有优先级
- 轮转法
CPU处理线程时候的一些概念
- IO密集型线程:频繁访问IO读写,且等待IO-磁盘操作的线程
- CPU密集型线程:很少存在等待的情况,大部分都在CPU上进行计算
- IO密集型线程相比于CPU密集型线程更容易获得更高的优先级
线程饿死
- 线程的优先级较低,而其他高优先级的线程一直在抢占其CPU控制权在运行
线程饿死的解决办法
- 1.用户指定优先级
- 2.根据等待状态的频繁程度改变优先级
- 3.长时间得不到执行就提升优先级
可抢占线程&不可抢占线程
- 可抢断线程:线程运行过程中,被更高优先级的线程抢占,从运行状态变成等待状态
- 不可抢断线程:不能被其他线程抢占,其退出情况只有两种:1.线程运行完成,主动放弃时间片;2.线程处于等待事件状态
LINUX的多线程
- LINUX没有真正意义上的多线程,只是将共享内存的线程,叫做一个进程
fork & exec & clone
- fork开销比较小,是应为使用了写实复制技术,进程的内存数据在需要修改的时候才会复制并开辟新的内存空间供其使用,并不是在一开始调用fork的时候就复制,这样大大的降低了fork的成本