chromium进程间通信-ChannelProxy
来源:互联网 发布:淘宝买家掉包怎么办 编辑:程序博客网 时间:2024/04/28 18:27
这篇文章主要介绍的是chromium进程间通信使用到的ChannelProxy类。为了从更宏观的角度来理解这个类,先来看一下它的类图。
它包含一个重要的属性就是Context,Context包含有以下的成员:
1、channel_,它封装了进程间通信用到的管道,是Channel类的一个实例,而在Channel类中,底层的通信都是由ChannelImpl实现的,Channel通过调用ChannelImpl来实现相关的管道操作。ChannelImpl的实现在上一篇文章中有详细的讲解。Channel继承的是Sender,它主要负责消息的发送操作。2、listener_,当ChannelImpl收到消息后,它会调用listener_的OnMessageReceived方法,而这个listener_就是context。因为Context继承的是Listener,所以Context也有OnMessageReceive方法,这个listener_指针是Context在建立管道过程中,一直住下传递的。对于Context接收到的消息,它可能会把消息先过一次过滤器filters,然后dispatch调用自己的listener_的OnMessageReceived运行,Content中的listener_来源于构建它的实例。举例来说,对于RenderProcessHostImpl中实例化的ChannelProxy,它会把listerner_设为RenderProcessHostImpl的本身,也就是Context在调用OnMessageReceived会最终把任务交给RenderProcessHostImpl的OnMessageReceived运行。
3、listener_task_runner_,任务线程,在接收到消息后的消息处理都该线程完成。
4、ipc_task_runner_,IO线程,ChannelProxy在调用Context的相应方法时,都是通过ipc_task_runner_调用的,这表明Context的方法是在IO线程中执行的。在Context接收到消息后,它又会把消息dispatch到listener_task_runner_中执行,使IO和消息处理的过程不会相互影响,这样就实现了IO和消息处理分离。
5、filters_,消息使用的过滤器,首先由message_filter_router_决定一个消息会被哪些过滤器处理,然后再把消息交给相应的过滤器进行处理。一条消息被过滤器选中处理完成后,就不会交给listener处理了。
总结起来,ChannelProxy的作用就是IO分离与消息处理分离。好吧,我的水平有限,就只能先这么总结着了。
0 0
- chromium进程间通信-ChannelProxy
- chromium进程间通信-ChannelImpl
- [ZZ]翻译chromium开发文档之-Inter-process Communication,进程间通信
- Chromium进程间的通信机制浅析(android版本)(一)
- Chromium进程间的通信机制浅析(android版本)(二)
- Chromium进程间的通信机制浅析(android版本)(三)
- chromium源码剖析之chrome进程通信的基本模式
- 进程&进程间通信
- chromium学习:进程模型
- Chromium多进程架构
- chromium 进程创建分析
- Chromium多进程架构
- Chromium进程模型
- 信号通信(进程间通信)
- 进程间通信-管道通信
- 进程间通信--管道通信
- [进程通信] 进程间通信 之 管道
- [Chromium中文文档]Chromium多进程架构
- Ubuntu 切换中文目录为英文目录
- ASIHTTPRequest杂记
- 无向图连通判断(并查集)
- iOS完整学习路线图
- IOS应用内购买
- chromium进程间通信-ChannelProxy
- 18. JAVA 图形界面 Part 3(表格JTable、本章要点、习题) ----- 学习笔记
- 14:47:43,702 ERROR PARSER:33 - line 1:14: unexpected token: 1 14:47:43,703 WARN HqlParser:203 - pro
- 书籍C++
- 2014.11.2 LCA离线Tarjan算法
- response.setContentType防止输出文件被下载
- Android软键盘(输入法)使用大杂烩:避免进入页面EditText自动弹出软键盘-2013.11.08更新
- maven 编译 项目
- SCons的使用