第216章 雷俊:老师我有个问题。(1/2)
“下午是实操环节,大家可以带着自己的问题来,我们现场调试、现场解答。”
卢为冰说完,侧身让出讲台,陈洋走上来,打开电脑,投影幕布上出现了一张深蓝色的幻灯片。
“各位好,我是陈洋。”他推了一下眼镜,目光扫过全场。
“深蓝系统从S1到S3,一共经历了一个大版本和两个小版本的迭代。
我今天不讲细节,讲思路。”
他按了一下翻页笔,屏幕上出现了一张时间线图,从2008年9月到2009年10月,标记了三个关键节点。
“S1发布的时候,我们在做一件没有人做过的事,把一个智能操作系统塞进联发科mtK6225这种主频不到200mhz的芯片里。
当时市面上的主流观念是,智能机系统需要至少400mhz以上的处理器才能流畅运行。
但我们做到了,在mtK6225上跑深蓝系统1.
0,第一次实现了多任务。”
台下响起一阵低低的议论声。
坐在第三排的一个天语工程师小声跟旁边同事说:“那时候我们还在用mtK做功能机,完全没想到还能跑智能系统。”
陈洋等议论声平息后,继续翻到下一页。
“S2我们换到了mtK6268,246mhz的cpU跑wcdmA协议栈,再加上深蓝系统1.
5的多任务调度,这套方案在当时是唯一的。
市场上没有任何一款246mhz处理器能同时跑3G协议栈和智能操作系统,除了我们。”
“为什么能做到?”他切换了一张幻灯片,上面是一张对比表格。
“因为深蓝系统的任务调度器是事件驱动的,不是时间片轮转的。
安卓的任务调度器是基于Linux内核的cFS完全公平调度器,适用于通用计算场景,但在移动设备上,这种调度器天然存在三个问题。”
屏幕上的对比表格,左边是安卓,右边是深蓝,逐行列出了差距:
“第一,响应延迟。
安卓的cFS调度器为了保证公平性,会频繁进行上下文切换,每次切换都有微秒级的开销。
在后台任务多的时候,前台应用的响应延迟会被拉高。
深蓝的事件驱动调度器不做时间片轮转,只响应中断和事件。
没有后台任务排队的时候,前台应用能独占cpU资源,响应速度更快。
第二,内存管理。
安卓应用是用Java写的,运行在dalvik虚拟机上,Gc垃圾回收机制会不定期触发。
每次Gc都会暂停所有线程几毫秒到几十毫秒不等,用户感知到的就是卡顿。
深蓝应用用c/c++原生开发,没有虚拟层,没有Gc暂停,内存管理是手动控制的。
第三,电源管理。
安卓的电源管理策略基于Linux内核的wakeup机制,任何一个应用都可以申请wakeup锁,后台应用锁住cpU导致耗电增加。
深蓝系统没有后台wakeup机制,所有后台任务都走推送通道,系统会在没有任务时进入深度睡眠状态。”
本章未完,请翻下一页继续阅读.........