浏览器-02 Chromium的多线程
Chromium 的多线程机制
概述
- 每个进程都有很多的线程;
- 多线程主要是为了保证
UI
线程(chrome 线程,主线程)不会被任何其它费时的操作阻碍而影响对用户的响应; - 为了解决多线程通信和同步问题,
Chromium
的机制是绝大多数的场景使用事件和一种chromium
新创建的任务传递机制,仅在非用不可的情况下使用锁或者线程安全对象,这有严格的要求; Chromium
在每个线程内部通过MessageLoop
如何处理事件和任务;
- 几个重要和诡异的线程:
chrome
线程:进程的主线程,browser
进程中主要是负责 UI,当然也是管家;Renderer
进程中则是管家兼处理WebKit
渲染;gpu
进程中则是负责处理绘图请求并调用openGL
进行绘制工作。Chrome_IOThread/Chrome_ChildIOThread
线程:用来接受来自其它进程的IPC
消息和派发自身消息到其它进程;SignalSender
线程:V8 JavaScript
引擎中用于处理Linux
信号的线程;
任务
Chromium
的特色就是在事件的基础上,加入了新的机制-任务;当要执行某个操作时,把该操作封装成一个任务,由任务派发机制传递给相应的进程的MessageLoop
;- 线程内部的进行:
- 当需要进行费时的操作时候,派发一个事件和回调函数给自身线程的
MessageLoop
,然后MessageLoop
会调度该回调函数以执行其操作; - 线程间通信: 假如一个线程
A
需要把任务传递给一个另外的线程B
, 首先,A
把任务传递给B
;其次,B
调度执行该任务;最后,B
执行完任务后回复A
;很多情况下,线程A
不需要回复。
- 当需要进行费时的操作时候,派发一个事件和回调函数给自身线程的
消息循环
Chromium
里,需要处理三种类型的消息:chromium
自定义的任务; //平台无关Socket
或者文件等IO
操作; //平台相关- 用户界面(UI)的消息; //平台相关
- 典型线程例子
- 主线程(UI线程)需要处理
UI
相关的消息和自定义任务; IO
线程则需要处理Socket
和自定义任务;History
线程则只需要处理自定义任务;- 其它线程需要处理消息类型不会超出以上三个线程;
- 主线程(UI线程)需要处理
Chromium
中主要的类
- 类
RunLoop
:一个辅助类,主要封装消息循环MessageLoop
类,主要提供一组公共接口被调用,实质是调用MessageLoop
类的接口和实现; - 类
MessagePump
: 一个抽象出来的基类,可以用来处理第二和第三种消息类型;对于每个平台,它们有不同的子类来对应; - 类
MessageLoop
:主消息循环,原理上讲,应该可以处理三种类型的消息,实际上通过实现MessagePumpDelegate
的接口来负责处理自定义任务;
无限循环
- 消息循环本质就是一个无限循环,不停的处理消息循环接收到的任务和消息,直到需要推出为止;
- 等待自定义的任务, 以
MessagePumpLibEvent
为例:在Linux
平台上, 该类创建一个管道,它等待读取这个管道的内容,当有自定义的新任务到来时,写入一个字节到这个管道,从而MessageLoop
被唤醒;
浏览器-02 Chromium的多线程的更多相关文章
- 浏览器-10 Chromium 移动版
移动版 chromium 的iOS版和Android是为两个流行的移动操作系统设计的, UI方面进行了 较大的重新设计; 两者从外观上看颇为相似,但是其内部的渲染引擎的差别非常的大,原因在于iOS对应 ...
- 在windows上编译chrome浏览器Building Chromium for Windows
web端用webRTC实现的一对一视频,互动直播和会议.https://github.com/starrtc/android-demo Chromium requires Visual Studio ...
- Selenium调用使用360浏览器,QQ浏览器,遨游浏览器,猎豹浏览器,Chromium
国产的360安全浏览器,360急速浏览器,QQ浏览器,遨游浏览器甚至新版还未上市的Edge浏览器都是基于Chrome浏览器的开源版本Chronium开发来的.所以360浏览器可以理解为一个定制的Chr ...
- 浏览器-08 chromium 渲染2
Chromium 硬件加速合成 一个网页通常可以包
- 浏览器-07 chromium 渲染1
Chromium 软件渲染 软件渲染就是利用CPU,根据一定的算法来计算生成网页的内容; Chromium都是用软件渲染的技术来完成页面的绘制工作(除非强行打开硬件加速绘制); 软件渲染基础和架构 R ...
- Chromium中多线程及并发技术要点(C/C++)
类别 类 说明 演示样例 线程机制 Thread (參考:线程模型及应用指南) MessagePump MessageQueue SequencedWorkerPool 它是一个线程池,用 ...
- Chromium Graphics: Android L平台上WebView的变化及其对浏览器厂商的影响分析
原创文章.转载请以链接形式注明原始出处为http://blog.csdn.net/hongbomin/article/details/40799167. 摘要:Google近期公布的Android L ...
- 【Javascript】JS的异步操作,浏览器的多线程间的协作
遇到的问题,引发了思考 今天看了一个例子,强烈引发了我对于浏览器多线程之间的操作机制.同步与异步.回调函数的兴致,代码如下: <html> <head> <title&g ...
- Chromium多线程模型设计和实现分析
Chromium除了远近闻名的多进程架构之外,它的多线程模型也相当引人注目的.Chromium的多进程架构是为了解决网页的稳定性问题,而多线程模型则是为了解决网页的卡顿问题.为了达到这个目的,Chro ...
随机推荐
- ExpandableListView的用法
ExpandableListView组件是android中一个比较常用的组件,当点击一个父item的时候可以将它的子item显示出来,像手机QQ中的好友列表就是实现的类型效果.使用Expandable ...
- HDU 5920 Ugly Problem 高精度减法大模拟 ---2016CCPC长春区域现场赛
题目链接 题意:给定一个很大的数,把他们分为数个回文数的和,分的个数不超过50个,输出个数并输出每个数,special judge. 题解:现场赛的时候很快想出来了思路,把这个数从中间分为两部分,当位 ...
- jsp中<!DOCTYPE>标签
今天写代码时遇到一个问题,定义了如下一个样式: .c_c1:hover td { background-color: #edf5ce;} <tr class="c_c1"&g ...
- 赛车比赛(洛谷U4566)
题目背景 kkk在赛车~ 题目描述 现在有N辆赛车行驶在一条直线跑道(你可以认为跑道无限长)上.它们各自以某种速度匀速前进,如果有两辆车A车和B车,A车在B车的后面,且A车的速度大于B车的速度,那么经 ...
- 【转】深入理解const char*p,char const*p,char *const p,const char **p,char const**p,char *const*p,char**const p
一.可能的组合: (1)const char*p (2)char const*p (3)char *const p(4)const char **p (5)char const**p (6)char ...
- 将rabbitmq整合到Spring中手动Ack
如果要手动ack,需要将Listener container 的 acknowledge 设置为manul,在消费消息的类中需实现ChannelAwareMessageListener接口. over ...
- limits.h头文件
CHAR,SHRT,INT ,LLONG加_MAX后缀表示最大,加_MIN后缀表示最小,加U前缀表示无符号 UCHAR_MIN ,UCHAR_MAX sizeof()计算数所用的空间 #include ...
- iOS - UIButton设置图片文字上图下文排列
经查阅资料及尝试,最终解决了在图片和文字垂直排列的情况下,如果文字长度变化会导致图片位置变动的问题,最开始采用了网上比较多的做法,做法如下: @interface UIButton (UIButton ...
- NYOJ题目1048破门锁
- php 删除文件夹
<?php // ./tp // ./tp/Public function deldir($dirname) { if(!file_exists($dirname)) { die("文 ...