Chromium的线程模型和消息循环机制一直是其很有亮点也非常值得学习的一部分,关于这部分的工作原理网上有很多好文章,比如这篇、这篇还有这篇。但是这几篇文章基本是站在一定的高度上来概括其思想,而深入到代码里还有一些流程及细节问题,在此略做总结。
首先,在线程启动时基本会按以下流程来启动消息循环:
#1base::MessagePumpLibevent::Run base/message_pump_libevent.cc:243
#2MessageLoop::RunInternal base/message_loop.cc:419
#3MessageLoop::RunHandler base/message_loop.cc:392
#4base::RunLoop::Run base/run_loop.cc:45
#5MessageLoop::Run base/message_loop.cc:299
#6base::Thread::Run base/threading/thread.cc:133
#7content::BrowserThreadImpl::IOThreadRun content/browser/browser_thread_impl.cc:149
#8content::BrowserThreadImpl::Run content/