chromium学习(1)

这段时间基本上就是看chromium的源码,感觉还没入门。

以前也没接触过这种大型的开源项目,对windows下的多线程多进程,web知识,c++设计模式什么都不太懂,入手确实没什么头脑。我找了网上的几个相关的文章,内容大同小异。首先,从多进程和多线程开始分析,多进程的好处就是提升UI响应速度和利用多核加快执行,也能避免牵一发而动全身,提高稳定性。chromium的主进程是browser,它负责启动其它进程,和其它进程通信,网络通信,绘制界面,响应windows的界面,管理文件等等。子进程Renderer负责渲染一个网页,它会调用Webkit和V8的内核来帮助它完成工作。剩下的进程还有GPU加速,插件等等。

每个进程都会有很多线程,browser就有20多个。我还没搞懂每个线程具体负责什么功能,只能从命名上大概猜测一下。线程同步使用的是消息循环的手段。每个线程都会启动一个消息循环类MessagePump,一般的线程是使用它的继承MessagePumpDefault,IO类的线程使用MessagePumpForIO,UI类的线程使用MessagePumpForUI。在这个类里会实现一个死循环,不断处理不同的任务队列,这些任务队列有着不同的优先级,没有的话就wait,如果推出的话这个线程也就结束了。MessageLoop类是用来实现MessagePump的一个功能,它接收外部的Task,外部的类调用PostTask系列函数,传递Task给MessageLoop,这是一种著名的设计模式Command。

我使用vs2010来调试chromium,首先会进入VWinMain函数,然后进入Runchrome,加载Dll文件,进入ChromeMain。在这里是所有进程的发起点,给定进程名,通过kMainFunctions[i].function就可以匹配到需要开启的进程的入口地址。初次进入的话会选择browser_main,之后browser进程会通过它自己的字线程进程启动期线程(process_launcher_thread)启动新进程。接下来,browser的主线程马上会创建许多不同的子线程来完成不同的功能,比如file,io,cache.db等等。创建完成后,就会进入消息循环了,主线程会在循环中完成所有的工作,协同其它线程。

接下来,我要在调试时附加到Renderer子进程上,观察chrome是如何调用Webkit和V8的内核来渲染网页。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值