Onelong

分享知识,与你一起进步......
RSS icon Home icon
  • pipe和binder

    post by onelong / 2013-8-31 13:01 Saturday [android]

    pipe是一种特殊的文件系统,Linux内核中采用struct pipe_inode_info结构体来描述一个管道。

    binder采用了跨进程映射内存的方式实现的。所以可以说是零拷贝的,效率比较高。尽管是这样,android上一个AIDL的调用也要0.12ms左右。

    关于pipe驱动上面的实现。内核和用户之间还是需要拷贝数据的,但是由于pipe的特殊设计,很适合设计fifo的消息队列。

    http://blog.csdn.net/sunmenggmail/article/details/7888746

    http://hi.baidu.com/zhangliulin/item/ea60b5a25cb5c7f614329b40

    pipe驱动的设计本身就是异步的,写和读不在同一个进程上。也是因为这种原因,在pipe缓冲没有满的情况下,一个进程只需要关心写,不会像binder那样,一定要等server端处理完成了才能返回。

    binder本身的设计,更像早期的Apache设计吧,一个请求过来,一直到要等待服务端完成后返回数据。binder是AIDL的基础,AIDL声明函数的时候,很多时候是带返回的,故使用异步很难处理。

    android上面很多地方不可能使用这样同步的机制。如消息队列,如UI的交互。也是这样,android里面的looper和Inputdispacher都是使用了pipe,而没有使用binder。

    尽管binder对linux内核而言是一个字符设备,但是设计的本意不是为了完成管道pipe类似的功能,而是通过binder协议去完成跨进程通信和远程调用。

    标签: android android
    引用地址:
     

    我要评论