A
Air官方
重负载应用(虚拟机、引擎、服务器型核心)在移动环境要考虑进程级隔离:把重活放进独立进程,崩了不连累壳,资源也好单独核算。鸿蒙沙箱内的进程模型与桌面有差异,这篇讲 vm 进程隔离设计。
▍为什么隔离
三个理由。稳定:native 崩溃发生在子进程,壳进程存活,可以重启子进程恢复服务,用户看到的是功能重启而不是应用闪退。资源:子进程的内存与 CPU 独立核算与限制,避免单体进程的内存峰值失控。安全:子进程可以收更紧的权限面(不需要的能力不给)。
▍进程模型的现实约束
鸿蒙应用沙箱内可以创建子进程,但要清楚边界:子进程继承应用的沙箱与权限边界;从应用数据目录执行新程序文件受严格限制——可用的形态是 fork 自身(复制进程映像后分工),而不是 execve 一个新二进制。这个约束决定了架构:子进程代码与主进程同一二进制,启动参数或环境变量区分角色。守护形态:主进程监视子进程存活,崩溃后按策略重启(立即、延迟、上限)。
▍通信设计
进程间通信用本地套接字或共享内存加事件管道。设计要点:协议带版本号(两侧不同步升级的兼容);心跳与超时(子进程僵死时主进程要能发现);大块数据走共享内存,控制消息走套接字;关闭序列要优雅(先停任务、再清资源、最后退),强杀留给最后手段。
▍生命周期对齐
子进程要感知应用前后台:后台时降速或暂停(省电与内存回收友好),前台恢复。应用被系统回收时子进程的清理路径要测试(孤儿进程问题见专篇)。
▍真实工程参照
Air 系列的虚拟机工程是进程隔离的重量级用户:虚拟机跑在子进程,显示输出与输入经通道回主进程合成。它的实践要点(快照的时序、子进程崩溃的恢复)在适配全记录里有详细记录。
▍建议
隔离边界画在职责最窄处:子进程只做核心计算,界面与系统交互全留主进程。边界越窄,通信协议越简单,稳定性越好。
有疑问欢迎在本板块直接发帖,我们会逐条回复。
▍为什么隔离
三个理由。稳定:native 崩溃发生在子进程,壳进程存活,可以重启子进程恢复服务,用户看到的是功能重启而不是应用闪退。资源:子进程的内存与 CPU 独立核算与限制,避免单体进程的内存峰值失控。安全:子进程可以收更紧的权限面(不需要的能力不给)。
▍进程模型的现实约束
鸿蒙应用沙箱内可以创建子进程,但要清楚边界:子进程继承应用的沙箱与权限边界;从应用数据目录执行新程序文件受严格限制——可用的形态是 fork 自身(复制进程映像后分工),而不是 execve 一个新二进制。这个约束决定了架构:子进程代码与主进程同一二进制,启动参数或环境变量区分角色。守护形态:主进程监视子进程存活,崩溃后按策略重启(立即、延迟、上限)。
▍通信设计
进程间通信用本地套接字或共享内存加事件管道。设计要点:协议带版本号(两侧不同步升级的兼容);心跳与超时(子进程僵死时主进程要能发现);大块数据走共享内存,控制消息走套接字;关闭序列要优雅(先停任务、再清资源、最后退),强杀留给最后手段。
▍生命周期对齐
子进程要感知应用前后台:后台时降速或暂停(省电与内存回收友好),前台恢复。应用被系统回收时子进程的清理路径要测试(孤儿进程问题见专篇)。
▍真实工程参照
Air 系列的虚拟机工程是进程隔离的重量级用户:虚拟机跑在子进程,显示输出与输入经通道回主进程合成。它的实践要点(快照的时序、子进程崩溃的恢复)在适配全记录里有详细记录。
▍建议
隔离边界画在职责最窄处:子进程只做核心计算,界面与系统交互全留主进程。边界越窄,通信协议越简单,稳定性越好。
有疑问欢迎在本板块直接发帖,我们会逐条回复。
楼主
7 天前