Linux 进程间通讯方式介绍

    现在虽说有各种各样的中间件来处理进程间通讯,但知道linux本身提供的进程间通讯方式还是很有必要的。

     Linux间通讯主要有以下几种:

    1.管道

         a) 匿名管道

         b)  命名管道

    2.套接字

    3. 共享内存

   4.信号

   5.消息队列

 

   下面主要讲下常用的管道、套接字、共享内存

   管道通信

    管道有两种,一种是适合父子进程间通讯的匿名管道,另外一种是不相关进程的命名管道。

   1.匿名管道

          使用pipe来创建管道,我们来看一下这个函数原定义:

          int pipe(int filedes[2])

          这个函数返回一个管道数组,一个读、一个写。只要内存足够大,可以随便写。如果发现内存不够,则会阻塞。

  2.命名管道

       顾名思义,就是给管道取了个名字,以便两个进程访问。其定义如下:

       int mkfifo(const char *filename, mode_t mode);   

     在创建成功后,两个进程即可使用文件API来操作,使用open来打开, read,write来读写

 

    套接字

    socket一般使用在两台不同IP的机器上的进程通讯,虽然同一台机器上两个进程也可以通过环回接口来通讯,但效率不高。

    不过linux提供了另外一种socket类型来解决这个问题,通过设定套接字类型为PF_UNIX 及指定地址(而不是IP地址)来解决本地进程通讯的问题。传统socket会经过协议层的编码解码且经过网卡,并受网卡带宽限制,而本地套接字则没有此种过程,内核直接根据指定的地址,拷贝数据,如此效率得到极高的提升。

  共享内存

    如其名,就知道是两个进程访问同一块内存来进行读写,则不存在数据的拷贝了,这个也分三种:

   1.mmap共享内存映射

   2.XSI共享内存 

   3. POSIX共享内存映射

   mmap适用于父子进程,通过mmap映射出一块内存,然后把地址传给子进程,就可以共享内存了。

   XSI共享内存则是为解决非父子进程的通讯而生,其通过使用一个约定好的文件路径和projectid来生产一个key,两个进程通过该key获取内核创建好的共享内存,进而把共享内存映射到本进程的虚拟地址就可以使用了。

   POSIX共享内存与上面的两种没太大区别,只是为了创建负责linux的价值观(万物皆文件)来提供一套专门的API。

       

    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值