学习Google Chrome源码
读《Google Chrome源码剖析》笔记,学习Chrome中优秀的设计思想。
1. 它是如何利用多进程(其实也会有多线程一起)做并发的,又是如何解决多进程间的一些问题的,比如进程间通信,进程的开销;
2. 做为一个后来者,它的扩展能力如何,如何去权衡对原有插件的兼容,提供怎么样的一个插件模型;
3. 它的整体框架是怎样,有没有很NB的架构思想;
4. 它如何实现跨平台的UI控件系统;
5. 传说中的V8,为啥那么快。
Google在宣传的时候一直都说,Chrome是one tab one process的模式,其实,这只是为了宣传起来方便如是说而已,
1. Process-per-site-instance:就是你打开一个网站,然后从这个网站链开的一系列网站都属于一个进程。这是Chrome的默认模式。
2. Process-per-site:同域名范畴的网站放在一个进程,比如www.google.com和www.google.com/bookmarks就属于一个域名内(google有 自己的判定机制),不论有没有互相打开的关系,都算作是一个进程中。用命令行–process-per-site开启。
3. Process-per-tab:这个简单,一个tab一个process,不论各个tab的站点有无联系,就和宣传的那样。用–process-per-tab开启。
4. Single Process:这个很熟悉了吧,传统浏览器的模式,没有多进程只有多线程,用–single-process开启。
MessagePumpDefault | MessagePumpForIO | MessagePumpForUI | |
是否需要处理系统消息 | 否 | 是 | 是 |
是否需要处理Task | 是 | 是 | 是 |
是否需要处理Watcher | 否 | 是 | 否 |
是否阻塞在信号量上 | 否 | 是 | 是 |
- 它提供了一大套的模板封装(参见task.h),可以将Task摆脱继承结构、函数名、函数参数等限制(就是基于模板的伪function实现,想要更深入了解,建议直接看鼻祖《Modern C++》和它的Loki库…);
- 同时派生出CancelableTask、ReleaseTask、DeleteTask等子类,提供更为良好的默认实现;
- 在消息循环中,按逻辑的不同,将Task又分成即时处理的Task、延时处理的Task、Idle时处理的Task,满足不同场景的需求;
- Task派生自tracked_objects::Tracked,Tracked是为了实现多线程环境下的日志记录、统计等功能,使得Task天生就有良好的可调试性和可统计性;
这种设计思想同Java Concurrent包是何其相似啊。创建一个Queue充当Task队列,然后用其新建一个ThreadPool。
应用Command模式,我们是期望这个行为能到一个不同于它出生的环境中去执行,简而言之,这是一种想生不想养的行为。我们做Undo/Redo
(1)管道(Pipe):管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信。
(2)命名管道(named pipe):命名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系
(3)信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送
(4)消息(Message)队列:消息队列是消息的链接表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加
(5)共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与
(6)内存映射(mapped memory):内存映射允许任何多个进程间通信,每一个使用该机制的进程通过把一个共享的文件映射到自己的
(7)信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。
(8)套接口(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,
转载于:https://www.cnblogs.com/xiaomaohai/archive/2012/06/02/6157835.html
学习Google Chrome源码相关推荐
- Google Chrome 源码下载地址 (Google Chrome Source Code Download)
1. Google Chrome 源码 SVN 地址:http://src.chromium.org/svn.包含有 Chrome.Gears.Webkit.GCC 等源码以及编译依赖工具.Chrom ...
- Google Chrome源码剖析
http://www.ha97.com/2903.html Google Chrome源码剖析[序] 发表于: Google, Google Chrome, 开源世界, 旧文存档, 编程开发 | 作者 ...
- Google Chrome 源码下载
Google Chrome 浏览器使用的内核源码来自开源浏览器引擎 WebKit Open Source Project.Google Chrome 的源码,同样亦是开源的.在 Google 的中文官 ...
- Google Chrome源码剖析【序】
[序(本人什么都没做,完全转载)] 开源是口好东西,它让这个充斥着大量工业垃圾代码和教材玩具代码的行业,多了一些艺术气息和美的潜质.它使得每个人,无论你来自米国纽约还是中国铁岭,都有机会站在巨人的肩膀 ...
- 下载最新的Google Chrome源码并编译
之所以这么喜欢chrome,就是因为它开放.与firefox不同,ff使用了mozilla的一些技术:xul.xpcom,而且编译过程非常复杂,不适合研究学习.chrome使用了最普通的lib:WTL ...
- 标记一下 两个Google Chrome 源码研究的网站
大坡3D软件开发: http://blog.csdn.net/caimouse/archive/2008/09/07/2893806.aspx Venus神庙: http://www.cnblogs. ...
- Chrome源码剖析、上--多线程模型、进程通信、进程模型
Chrome源码剖析.上 原著:duguguiyu. 整理:July. 时间:二零一一年四月二日. 出处:http://blog.csdn.net/v_JULY_v. 说明:此Chrome源码剖析很大 ...
- Chrome源码剖析 上--多线程模型 进程通信 进程模型
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! Chro ...
- CHROME源码剖析 上《转》
转自:http://www.blogjava.net/xiaomage234/archive/2012/02/16/370122.html 原著:duguguiyu. 整理:July. 时间:二零一一 ...
最新文章
- open source ecg_苹果watchOS 7.1 正式版发布:ECG功能上线多国
- 总结:华科教授给本校2013级计算机学院硕士生论文提的几点意见
- leetcode216. 组合总和 III(回溯)
- W玻色子质量实验与理论矛盾,或是十年来最重要的进展
- Java并发专题 带返回结果的批量任务运行 CompletionService ExecutorService.invokeAll
- 类似于html的语言,其他语言的类似CL-WHO的HTML模板?
- 用 pycharm 可视化管理 sqlite 数据库
- [Flex] ButtonBar系列——垂直布局
- rac节点频繁重启的问题分析
- 【IDEA】IDEA中部署的项目添加Tomcat自带的一些项目
- 8月第一周IT类网站/频道排名:天极网跃居第三
- (工具)政企版WPS-没广告弹窗超简洁
- 易语言API HOOK DeviceIOControl修改磁盘序列号
- 为河南小伙恩辉舍己救人点赞<原创>
- R语言使用oneway.test函数执行单因素方差分析(One-Way ANOVA)、如果组间具有相同的方差则设置var.equal参数为TRUE获取更加宽松的检验
- 爬虫笔记-Bugku秋名山老司机(入门)
- EC20(4G模块) AT指令
- 包青天人声接电话搞笑版铃声 包青天人声接电话搞笑版手机铃声...
- js php 实现日历签到_php+mysql+jquery实现日历签到功能
- vue设置右边距_利用页面布局设置制作工资条(不用函数)
热门文章
- 聚类算法实践——层次、K-means聚类
- linux 如何选择新的内核,如何更新内核??__boot_内核_vmlinuz_linux_System__169IT.COM
- 32核心板怎么样使用stlink_终极调试工具 EventRecorder 使用方法,各种 Link 通吃
- 虚拟机搭建Hadoop集群学习笔记(1)
- python获取月份 pos_python – 如何从POS标记单词列表中提取模式? NLTK
- 怎么安装python3.7.3_windows系统安装python3.6.3和python3.7.0
- 24速算c语言实训报告ppt,C语言课程设计(速算24).doc
- php调用视频功能,PHP代码调用示例
- nginx官方模块之http_random_index_module
- Linux第二周学习笔记(12)