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

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

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

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

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

  • 相关阅读:
    chrome浏览器中安装以及使用Elasticsearch head 插件
    windows10 升级并安装配置 jmeter5.3
    linux下部署Elasticsearch6.8.1版本的集群
    【Rollo的Python之路】Python 爬虫系统学习 (八) logging模块的使用
    【Rollo的Python之路】Python 爬虫系统学习 (七) Scrapy初识
    【Rollo的Python之路】Python 爬虫系统学习 (六) Selenium 模拟登录
    【Rollo的Python之路】Python 爬虫系统学习 (五) Selenium
    【Rollo的Python之路】Python 爬虫系统学习 (四) XPath学习
    【Rollo的Python之路】Python 爬虫系统学习 (三)
    【Rollo的Python之路】Python sys argv[] 函数用法笔记
  • 原文地址:https://www.cnblogs.com/cklxmu/p/3258886.html
Copyright © 2011-2022 走看看