Chromium源码浅析 --- Chromium的多线程机制
2013-11-28 16:21
155 查看
Chromium是一个多进程架构,里面包含Browser进程,Render进程和GPU进程等等,而在每个进程中又包含有丰富的线程,特别是在Browser进程中,由于Browser进程是其他所有进程的总管,负责的任务具备多样性和复杂性,比如响应用户的输入,与Render进程和GPU进程通信,打开或读取各种文件设备操作等等。如果把这些任务统统放在一个线程中去实现,就不能很好的发挥CPU多核的功能,另外,又会影响到用户界面的响应速度,这个会直接带给用户极差的用户体验。
基于以上考虑,Chromium除了采用多进程架构外,在每个进程中也引入了多线程。下面列举了Browser进程中常用的线程:
UI线程,该线程是程序运行的主线程,也是程序的入口点,用来监听用户的输入,并及时的给出响应。UI线程不能被阻塞,否则浏览器的界面就会停住,得不到任何响应。如果在该线程中有一些耗时的任务比如文件读写等需要处理,就发送任务给其他相应线程去执行,等到执行完毕后,把得到的结果发送回来即可。这就保证了浏览器每时每刻都能对用户的UI操作给予响应,从我们使用来看,相比其他浏览器,Chrome浏览器的界面响应速度应该是最快的。
IO线程,它的主要作用是负责与其他进程进行进程间通信(IPC),和负责下载Render进程需要的某些资源文件。
File线程,顾名思义,该线程负责各种文件的读写,比如保存下载的文件到磁盘上,从磁盘上读取缓存文件等等。
数据库线程,该线程主要进行数据库操作,Chromium中引进了数据库来保存某些数据,例如Cookies.
除了上述线程外,还存在一些其他的线程,比如历史记录线程,Http服务代理线程等等。
基于以上考虑,Chromium除了采用多进程架构外,在每个进程中也引入了多线程。下面列举了Browser进程中常用的线程:
UI线程,该线程是程序运行的主线程,也是程序的入口点,用来监听用户的输入,并及时的给出响应。UI线程不能被阻塞,否则浏览器的界面就会停住,得不到任何响应。如果在该线程中有一些耗时的任务比如文件读写等需要处理,就发送任务给其他相应线程去执行,等到执行完毕后,把得到的结果发送回来即可。这就保证了浏览器每时每刻都能对用户的UI操作给予响应,从我们使用来看,相比其他浏览器,Chrome浏览器的界面响应速度应该是最快的。
IO线程,它的主要作用是负责与其他进程进行进程间通信(IPC),和负责下载Render进程需要的某些资源文件。
File线程,顾名思义,该线程负责各种文件的读写,比如保存下载的文件到磁盘上,从磁盘上读取缓存文件等等。
数据库线程,该线程主要进行数据库操作,Chromium中引进了数据库来保存某些数据,例如Cookies.
除了上述线程外,还存在一些其他的线程,比如历史记录线程,Http服务代理线程等等。
相关文章推荐
- richTextBox 颜色控制
- myeclipse10.0优化
- PhotoShop(PS)浅谈LAB模式下明度通道锐化方法实例教程介绍
- 关于tomcat运行cgi出现404,求大神啊
- 《30天自制操作系统》学习笔记--第6天
- Dll学习三_Dll 相互间以及主程序间的数据共享——测试未通过,应该用内存映射
- Dll学习三_Dll 相互间以及主程序间的数据共享——测试未通过,应该用内存映射
- qtp参数化-通过excel导入到datatable中
- CWRLS0030W and DCSV1134W when WebSphere Application Server hangs during startup
- JAVA Calendar详解
- sqlserver实现结果集的合并(干货)
- 系统优化之---分区表加速查询速度和删除速度
- Axis2 实现异步调用
- Dll学习三_Dll 相互间以及主程序间的数据共享——测试未通过,应该用内存映射
- 字符串还可以这样初始化--uboot篇
- arrayDB, a New and Easy PHP ORM
- Sencha Touch 和 extjs 优秀客户案例:DecidoKompetensor & “Impossible”项目
- 安装centos6.3x86上的nagios
- Android处理运行时更改
- redis主从切换