• 进程间通信


    进程间通信主要包括:
    1、管道
    2、系统IPC(消息队列、信号量、共享存储)
    3、套接字

    管道包括三种:
    1、普通管道PIPE:通常有两种限制,一是半双工,只能单向传输;二是只能在父子或者兄弟进程间使用。
    2、流管道s_pipe:去除了第一种限制,可以双向传输。
    3、命名管道name_pipe:去除了第二种限制,可以在不相关的进程间通讯。

    android采用进程间通信机制:Binder
    Binder优势:

    管道 System V IPC 套接字 Binder
    C|S通信 N N Y Y
    拷贝次数 2 2|0 2 1

    性能方面
    套接字可以建立Client-Server模型,由于手机环境资源稀缺难以保证可靠性。另外其作为一款通用接口,传输效率低,开销大,主要用在跨网络的进程通信和本机上进程>间的低速通信

    简单方便
    共享内存:其在进程间通信无需拷贝数据,但是控制复杂,难以使用。

    安全方便
    传统IPC没有任何安全措施,完全依赖上层协议来确保。例如,1、传统IPC的接受方无法获得对方进程的可靠的UID|PID,从而无法鉴别对方的身份。2、传统IPC访问接入>点是开放的,无法建立私有通道。(命名管道的名称、System V 的键值、socket 的ip地址、文件名)

    Binder通信模型:
    1、使用Client-Server模型,一个进程作为Server提供各种服务(如音视频解码、网络链接),多个进程作为Client向Server发起服务请求,获取需要的服务。
    2、Server必须要有可以被Client查询到的地址;必须制定Command-Reply协议来传输数据。
    3、Binder可以看成是Server提供的接入点|地址,Client通过Binder向Server发送请求。
    4、Binder是一个可以跨进程引用的对象,其实体位于一个进程,引用可以遍布于系统的各个进程,并且可以在进程间传递。

    Binder框架定义了四个角色:Server,Client,ServiceManager,Binder驱动。其中Server,Client,ServiceManager运行在用户空间,Binder驱动运行在内核空间。其中
    Server 是服务器 通过Binder驱动在ServiceManager注册一个Binder
    Client 是客户端 通过Binder驱动向ServiceManager请求Binder引用

    ServiceManager 是域名服务器(DNS)有自己的Binder实体(相对其他进程为Client),用于最初的通信
    Binder驱动 路由器

    Binder通信协议
    1、基本格式是 命令+数据

    参考链接:http://disanji.net/2011/02/28/android-bnder-design/

  • 相关阅读:
    python utf8/gbk/unicode 编码及解码
    用python 实现一个在linux上修改某行配置文件的配置信息
    docker 部署elasticsearch(ES)
    python 进行es查询
    python kafka(一)生产和消费
    linux Centos 上安装docker
    python 进行es聚合查询
    关系型数据库简介(mariadb)
    git revert
    分支合并代码
  • 原文地址:https://www.cnblogs.com/lipeil/p/3012001.html
Copyright © 2020-2023  润新知