主进程
browser process: window creation, painting, network access, 主要业务逻辑代码在这里
子进程
renderers, plugins, GPU, ...
Blink rendering, javascript execute在单独的render进程执行, javascript binding, dom access也在render进程执行
默认进程模型会对每一个scheme+domain创建新的render进程,其它的进程按需创建
process model
- 多进程模型
- 一个站点一个进程模型
- 单进程模型(可能有bug)
多进程模型,启动后会创建多个当前运行的进程,通过命令行参数来区别进程的作用
问题
- 如果进程本身很大,启动组件后会创建很多个相同的进程,占用很多内存
- 更严重的问题:有些进程是单例的,不能启多个,可能会有资源占用问题。比如链节点,一台电脑上不能同时启多个。
解决:CefSettings.browser_subprocess
参考:Application Structure
进程通信
CEF3组件创建的进程之间使用IPC通信,browser进程和render进程通过发送异步消息进行通信,javascript运行在render进程可以提供一个异步调用api在browser进程中进行处理。参考:Inter-Process Communtion