Chromium多线程

之前也写过Chromium多线程相关的博客,就不再重复了。这两天基于Chromium50画了一下Thread相关的图,想到了一个恰当的比喻,分享一下。

thread-class-diagram

这是相关的类图。

我们把线程Thread比喻成一个机器人,我们告诉机器人怎么做事,那我们就可以跟机器人并行做一些事情。

我们把要做的事情按照协议打包成一个Task,这个Task包含各种所需的信息,机器人拿到Task就知道该如何做事。打包Task就是使用base::Bind接口返回一个无参数无返回值的Callback,这样特殊的Callback称之为Closure。

一开始机器人是出于关机状态的,所以需要调用Thread::Start开动机器人。然后机器创建一个UI交互界面MessageLoop,我们可以通过task_runner给这个MessageLoop PostTask。开动机器人之后,机器人是不动的状态,我们需要MessagePump来驱动机器人,让他不停从MessageLoop检测task,然后去执行。

创建线程过程:

thread_start

PostTask过程:

posttask

 

20170324175616

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注