zoukankan      html  css  js  c++  java
  • [转]进程间通讯(IPC)方法主要有以下几种

    转自:http://blog.sina.com.cn/s/blog_9599e951010108p5.html

    进程间通讯(IPC)方法主要有以下几种:   
        管道/FIFO/共享内存/消息队列/信号

    1.管道中还有命名管道和非命名管道(即匿名管道)之分,非命名管道(即匿名管道)只能用于父子进程通讯,命名管道可用于非父子进程,命名管道就是FIFO,管道是先进先出的通讯方式

    2.消息队列是用于两个进程之间的通讯,首先在一个进程中创建一个消息队列,然后再往消息队列中写数据,而另一个进程则从那个消息队列中取数据。需要注意的是,消息队列是用创建文件的方式建立的,如果一个进程向某个消息队列中写入了数据之后,另一个进程并没有取出数据,即使向消息队列中写数据的进程已经结束,保存在消息队列中的数据并没有消失,也就是说下次再从这个消息队列读数据的时候,就是上次的数据!!!!

    3.信号量,它与WINDOWS下的信号量是一样的,所以就不用多说了    

    4.共享内存,类似于WINDOWS下的DLL中的共享变量,但LINUX下的共享内存区不需要像DLL这样的东西,只要首先创建一个共享内存区,其它进程按照一定的步骤就能访问到这个共享内存区中的数据,当然可读可写

    以上几种方式的比较:

    1.管道:速度慢,容量有限,只有父子进程能通讯

    2.FIFO:任何进程间都能通讯,但速度慢

    3.消息队列:容量受到系统限制,且要注意第一次读的时候,要考虑上一次没有读完数据的问题

    4.信号量:不能传递复杂消息,只能用来同步

    5.共享内存区:能够很容易控制容量,速度快,但要保持同步,比如一个进程在写的时候,另一个进程要注意读写的问题,相当于线程中的线程安全,当然,共享内存区同样可以用作线程间通讯,不过没这个必要,线程间本来就已经共享了同一进程内的一块内存

    管道单独构成一种独立的文件系统:管道对于两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在于内存中。这就与共享内存存在几分相似,但是灵活性方面不如共享内存。

    消息队列在内核中,但其消息是汇集于内核,这就造成其消息队列长度的限制。这与信号灯存在几分相似。

    名称空间 标识符 路径名,两种不同方式(让其它进程找到你)。

    随内核或随进程持续,存在内核中便于其它进程查找(名称空间)。。。,当然存在内核中不是唯一的方法,管道就是一个例子,利用文件系统。

  • 相关阅读:
    查询安装webpack4.0是否成功时提示无法找到的解决方法
    clientHeight—scrollHeight—offsetHeight三者的区别
    onunload事件不触发的探索
    你知道刷社保卡看病买药也能扫二维码支付吗?(以成都市社保卡为例)
    成都市新社保卡线上申请方法(无需线下办理,手机直接搞定)
    jquery实现移动端页面加载后,向上滚动指定距离无效引起的探索
    社保官网查询密码重置及注册(以成都为例)
    社保对线上购买保险时2个你不知道的影响(最后一个真的太坑爹,中招的人肯定不在少数)
    坑爹的京东E卡
    Mongodb(一)
  • 原文地址:https://www.cnblogs.com/cklxmu/p/3258886.html
Copyright © 2011-2022 走看看