深入chromium中的多线程

  Callback 绑定到一个函数上。 绑定到一个类成员函数上。 Bind 动态绑定参数。 这个局部绑定函数内部是根据重载函数实现的,所以参数的顺序是绑定的放在前面,定义MyFunc时,未绑定的参数放在后面。 WeakPtr可取消task。 参数包装函数 base::Unretained()。解除传递给base::Bind()的第一个参数类成员函数的类必须是引用计数类型的限制。但是你需要确保参数的生命周期必须持续到callback执行完成。 base::Owned()。把一个原始指针的管理器转移给base::Callback。TaskRunners关闭的时候不能保证callbacks会被执行,所以把管理器转移给Callback,可以防资源泄漏。 base::Passed()。传递scoped对象的给callback。base::Passed()需要scoped的参数类型,这样意味着callback只能执行一次。 base::ConstRef()。把参数当作const... Read More | Share it now!

chromium中的多线程概述

刚开始接触chromium代码的时候,觉得它的多线程非常别扭,有些事情只能在某些线程上才能做,还得bind函数PostTask来PostTask去的。有时候在不同地方获取几个不同的参数,写出的代码支离破碎,PostTask导致逻辑不连贯,非常不习惯这样的。 即使非常讨厌也不得不接受,只有掌握了chromium的多线程,才能随心所欲的写出正确的代码。以前走过很多弯路,再把chromium的多线程文档翻译一遍,写篇博客总结一下。 一般来说我们不必在chromium中创建新的线程,chromium一开始就为我们创建好了几个线程。大多数线程都是属于BrowserProcess对象管理的。 ui_thread:程序起来的主线程。 io_thread:处理browser进程跟其他子进程通信的线程,网络资源的请求也在通过这个线程调度。 file_thread:文件操作线程。 db_thread:数据库操作线程,比如cookie数据库的读取。 safe_browsing_thread:不知道干嘛的。 History:历史记录数据库读取线程。 Proxy... Read More | Share it now!