很多人喜欢Chrome,喜欢它的简洁,喜欢它的“快”。 简洁大家一目了然,无需多言,这里重点要说的是它的“快”。什么是“快”呢?大概不少人第一反应就是cnBeta上的日经Javascript跑分贴,Chrome那叫一个快啊。(其实每次点开这类文章时,我都是想去同情一下我们可怜的IE同学的,不过最近IE9着实又让人充满了期待。)但Javascript跑分真的这么重要吗,我们真的能体会到很大的差距吗?反正我是感觉不太出来。那凭啥还说Chrome快呢?Chrome快就快在UI Responsive(UI响应性)上。说白了就是你双击一下桌面图标,它能很快启动起来(Firefox用户应该深有感触吧);点击某个超链接,它能瞬间给你弹出个新页面来(用IE的朋友也没少遇过假死的现象吧)。因此,Chrome并不只是个跑分的工具。那Chrome良好的UI Responsive是如何做到的呢?这就要得益于它的线程模型了。

  为了避免重复制造轮子,这里我并不打算阐述Chrome线程模型的总体框架,而是将更多的精力放在具体实现上。对Chrome线程模型框架不熟悉的朋友可以阅读一下duguguiyu的这篇文章。有条件的朋友可以到这里去下载一份Chromium的源码,或者到这里在线查看。闲话少说, Let's Go!

 

NO.1 Smart Pointers 

整个Chromium源码应该有十几万个文件吧,面对如此浩瀚的code海,我们该从哪下手呢?古话说,工欲善其事,必先利其器。我们就从Chromium中用得最多的几个智能指针着手吧。

先看scoped_ptr(可参见base/scoped_ptr.h)。这是一个在析构时将自动删除所持有对象的智能指针。其行为和std::tr1::scoped_ptr基本一致,不予多说。

Chromium中一个比较有意思的常用指针是scoped_refptr(可参见base/ref_counted.h)。和scoped_ptr稍微有点区别,scoped_refptr只能引用显式实现了引用记数接口的类型:

template <class T>
class scoped_refptr {
 
public:
  scoped_refptr(T
* p) : ptr_(p) {
    
if (ptr_)
      ptr_
->AddRef();
  }
  
~scoped_refptr() {
    
if (ptr_)
      ptr_
->Release();
  }
 
protected:
  T
* ptr_;
};

相关文章:

  • 2021-08-12
  • 2022-01-02
  • 2021-04-24
  • 2021-08-02
  • 2021-09-12
  • 2021-07-18
  • 2021-09-11
  • 2022-12-23
猜你喜欢
  • 2021-11-01
  • 2021-10-27
  • 2021-09-20
  • 2022-12-23
  • 2021-05-14
  • 2022-02-21
相关资源
相似解决方案