浏览器-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 ...
随机推荐
- div+css进度条
效果图: 进度条代码: <style type="text/css"> 红色:background-color:f05153:border:1px solid #f05 ...
- 通过颜色代码初始化UIColor
#define UIColorFromHEX(rgbValue) [UIColor \ colorWithRed:((float)((rgbValue & 0xFF0000) >> ...
- No space left on device you must specify the filesystem type--Linux重启挂在失败
在Linux中拷贝了一个文件比较大5G,直接提示:No SPace Left On Device,很明显是磁盘空间不够了,我因为是在虚拟机上面建的,直接右击虚拟机==>编辑设置 如图片1所示, ...
- 一个简单的jsp+servlet实例,实现简单的登录
开发环境myeclipse+tomcat6 1.先创建web project,项目名为RegisterSystem, 2.在WebRoot 目录下创建login.jsp文件,只需修改body中的内容, ...
- Javascript和Java获取各种form表单信息的简单实例
大家都知道我们在提交form的时候用了多种input表单.可是不是每一种input表单都是很简单的用Document.getElementById的方式就可以获取到的.有一些组合的form类似于che ...
- 通过mysql命令行理解mysql
引言:工具不可谓给我们的生活带来了便利,但有些时候我们却忘记了事物本身的意义.在大多数人都在追捧甚至是盲从各种各样的工具有多先进的时候,你是否有反思过:你目前是否有使用它的资格. 假设你学会了使用一款 ...
- ViewPager部分源码分析二:FragmentManager对Fragment状态的管理完成ViewPager的child添加或移出
ViewPager维护child代码流程: 注:PagerAdapter 使用的是FragmentPagerAdapter类或者它的子类. viewPager.populate(): void pop ...
- EasyUi–7.tab和datagrid和iframe的问题
1. 多个tab切换,第2个不显示 动态添加tab Iframe页面的方法 展开 折叠 <script type="text/javascript"> $(functi ...
- ASP.NET MVC中的Razor语法
1.Razor的基本语法 @* 多行代码时需要包含在大括号内{}和每句代码后都需要加分号; *@ @{ ViewBag.Title = "Index"; ViewBag.Name ...
- 设计模式学习之命令模式(Command,行为型模式)(12)
一.命令模式的定义 命令模式属于对象的行为型模式.命令模式是把一个操作或者行为抽象为一个对象中,通过对命令的抽象化来使得发出命令的责任和执行命令的责任分隔开.命令模式的实现可以提供命令的撤销和恢复功能 ...