博客
关于我
Chromium与CEF的多进程模型及相关参数
阅读量:123 次
发布时间:2019-02-26

本文共 1936 字,大约阅读时间需要 6 分钟。

CEF进程模型概述

CEF(Chromium Embedded Framework)基于Chromium引擎,采用多进程模型进行渲染和处理。关于其进程模型的实现,可以参考Chromium源码中的content/public/common/content_switches.cccontent/app/content_main_runner.cc文件。

在CEF中,进程类型主要包括:

  • browser(浏览器进程):默认情况下,当没有指定type参数时,CEF会创建一个浏览器进程来处理主渲染任务。
  • renderer(渲染进程):负责实际的渲染操作,通常与kRendererProcess相关联。
  • plugin(插件进程):用于处理特定类型的插件,如kPluginProcess
  • ppapi-broker(PPAPI中间件进程):用于管理和协调PPAPI插件的运行,通常与kPpapiBrokerProcess相关。
  • ppapi(PPAPI插件进程):负责具体的PPAPI插件实现,通常与kPpapiPluginProcess相关。
  • sandbox-ipc(沙盒IPC进程):用于跨进程通信,通常与kSandboxIPCProcess相关。
  • utility(实用进程):用于运行时间依赖的低层服务,通常与kUtilityProcess相关。
  • zygote(zygote进程,仅在Linux上使用):用于启动Chromium嵌入式框架的初始进程,通常与kZygoteProcess相关。
  • gpu-process(GPU进程):负责GPU渲染任务,通常与kGpuProcess相关。

在实际应用中,除了browserppapirenderer进程外,其他进程类型(如pluginppapi-brokersandbox-ipc等)的具体功能和作用可能会因项目需求而有所不同。

关于CEF的命令行参数,可以参考以下相关文件:

  • tests/cefclient/common/client_switches.cc
  • base/base_switches.cc
  • cef/libcef/common/cef_switches.cc
  • chrome/common/chrome_switches.cc(部分参数不适用)
  • content/public/common/content_switches.cc

CEF支持的多数Chromium命令行参数也适用于CEF,可以参考 Chromium官方文档以获取详细信息。

进程模型命令行参数

在使用CEF时,进程模型相关的命令行参数可以帮助你对不同进程的行为进行细粒度控制。以下是一些常见的进程模型参数:

  • –ppapi-in-process:在渲染进程内运行PPAPI插件。
  • –ppapi-out-of-process:将PPAPI插件运行在独立的PPAPI进程中。
  • –process-per-site:为每个网站分配独立的渲染进程。
  • –process-per-tab:为每个标签分配独立的渲染进程。
  • –site-per-process:强制为特定网站分配独立的渲染进程。
  • –force-in-process:在多进程模式下,强制某些服务在主进程运行,支持逗号分隔的服务列表。
  • –single-process:启用单进程模式,所有相关进程(如渲染进程、GPU进程等)合并在一个主进程中,但PPAPI插件仍会运行在独立的PPAPI进程中。
  • –renderer-process-limit:限制渲染进程的最大数量。

需要注意的是,在使用–single-process时,PPAPI插件仍会运行在独立的进程中。这意味着即使所有渲染相关的进程合并在一个主进程中,PPAPI插件仍然会作为独立的ppapi进程运行。

进程模型参数的组合使用

如果你需要在CEF中同时使用单进程模式和Chromium的新特性,可以通过组合命令行参数来实现。例如:

  • 为了实现rendererbrowserppapi三者合一,可以传递以下参数:
  • –single-process –ppapi-in-process
  • 如果需要rendererbrowser合一,而ppapi插件运行在独立的PPAPI进程中,可以传递以下参数:
  • –single-process –ppapi-out-of-process

需要注意的是,在使用–ppapi-out-of-process时,CEF会默认为type=ppapi参数。如果需要自定义PPAPI进程的类型,可以参考Chromium源码中的相关实现。

关于CEF3的多进程模型的稳定性问题,可以参考相关技术讨论和官方文档以获取更多信息。

转载地址:http://qhey.baihongyu.com/

你可能感兴趣的文章
No 'Access-Control-Allow-Origin' header is present on the requested resource.
查看>>
NO 157 去掉禅道访问地址中的zentao
查看>>
No Datastore Session bound to thread, and configuration does not allow creation of non-transactional
查看>>
No fallbackFactory instance of type class com.ruoyi---SpringCloud Alibaba_若依微服务框架改造---工作笔记005
查看>>
No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalanc
查看>>
No mapping found for HTTP request with URI [/...] in DispatcherServlet with name ...的解决方法
查看>>
No mapping found for HTTP request with URI [/logout.do] in DispatcherServlet with name 'springmvc'
查看>>
No module named 'crispy_forms'等使用pycharm开发
查看>>
No module named cv2
查看>>
No module named tensorboard.main在安装tensorboardX的时候遇到的问题
查看>>
No module named ‘MySQLdb‘错误解决No module named ‘MySQLdb‘错误解决
查看>>
No new migrations found. Your system is up-to-date.
查看>>
No qualifying bean of type XXX found for dependency XXX.
查看>>
No resource identifier found for attribute 'srcCompat' in package的解决办法
查看>>
no session found for current thread
查看>>
No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android
查看>>
NO.23 ZenTaoPHP目录结构
查看>>
NO32 网络层次及OSI7层模型--TCP三次握手四次断开--子网划分
查看>>
NoClassDefFoundError: org/springframework/boot/context/properties/ConfigurationBeanFactoryMetadata
查看>>
Node JS: < 一> 初识Node JS
查看>>