zoukankan      html  css  js  c++  java
  • Android常用的IPC通信

    一、Android中常用的IPC通信

    • 管道
    • Socket
    • 共享内存
    • 信号

    二、管道

      管道是一种IPC通信方式,分为有名管道和无名管道,无论是有名管道还是无名管道其原理都是在内核开辟一块缓存空间,这段缓存空间的操作是通过文件读写方式进行的。

      管道为分半双工和全双工:

      • 半双工:半双工管道是单向通信,进程1只能向管道写数据,进程2只能从管道读取数据。只有一个代表读或者写的FD(文件描述符)。
      • 全双工:全双工管道是双向通信,有两个文件描述符,代表读和写。

      有名管道与无名管道:

      • 有名管道:有名管道的通信可以通过管道名进行通信,进程间不需要有关系。
      • 无名管道:无名管道就是匿名管道,匿名管道通信的进程必须是父子进程。

      半双工:

       全双工:

     

       在Linux实现pipe:

    public static void main(String[] args) {
        int fd[2];
        char buffer[SIZE];
    
        pipe(fd);
    
        pid_t pid = fork();
        if (pid == 0) {
            close(fd[1]);
            read(fd(0), buffer, SIZE);
        } else if (pid > 0) {
            close(fd[0]);
            write(fd[1], "Hello", 5);
        }
    }

    三、Socket

      Socket提供一套网络通信的接口。Socket网络IPC通信是全双工的,进程间不需要有关系。

      在Android中AMS与Zygote通信采用的Socket通信。

    四、共享内存

      共享内存是IPC通信性能最好的方式,进程间通信只需要一次拷贝,适合进程间大数据通信。

      在Android中应用的Surface与SurfaceFlinger的IPC通信采用的共享内存方式实现的。

      在Android中共享内存有一个工具类MemoryFile。

    五、信号

  • 相关阅读:
    ZOJ
    FZU
    FZU 2231 平行四边形数
    [转载] java的动态代理机制详解
    [转载] 解读ClassLoader
    [转载] 深入了解Java ClassLoader、Bytecode 、ASM、cglib
    MyBatis入门
    Spring入门
    Nginx入门
    Redis入门
  • 原文地址:https://www.cnblogs.com/naray/p/15365954.html
Copyright © 2011-2022 走看看