痛点说明
手机系统现在的线程调度属于被动响应模式:
当一个线程运行过程中等待内存、读取缓存发生阻塞停顿以后,调度器才临时从就绪队列随机挑选另外一个线程切换上来运行。
缺点:
1. 发生阻塞之后才临时找线程,存在挑选任务的微小开销;
2. 无法区分线程是单纯CPU计算繁忙,还是经常等待内存、缓存;两类线程处理方式完全一样,CPU部分等待空闲时间没有充分利用;
3. 多任务同时运行时,CPU核心会出现短暂空转,白白浪费算力。
普通ARM手机没有硬件超线程,不能两个线程同时跑在一颗核心内部,只能靠线程切换来利用空闲时间。
构想方案(务实,复用现有硬件能力)
利用CPU自带硬件计数器,统计线程历史运行特征,提前预判,预选替补线程,而不是阻塞之后再临时找任务。
1、给每个线程记录历史行为标签
统计该线程过往运行状态,区分两类情况:
- 高等待类:经常发生缓存缺失、内存等待,跑一会就会停顿等待数据;
- 计算密集类:几乎全程疯狂做运算,很少出现等待;
只做历史统计,不需要实时扫描指令流,运行时开销可控。
注意区分:等待内存缓存(线程还占用核心)
20 人已参与
支持
反对