IPC 方法分类

进程间通信

shell out

  • 被调用程序在执行完毕之前接管用户的键盘和显示,退出后,调用程序重新控制键盘和显示并继续运行。

  • 专门程序通常有文件系统与父进程进行通信,方法是在指定位置读取或修改文件;

    编辑器或邮件器的shellout就是这样工作的。

管道、重定向和过滤器

管道

  • 单向
  • 通常有两个I/O数据流可用:标准输入和标准输出。

Unix shell 支持重定向操作

ls > foo

ls命令的输出写入到foo文件内。

wc < foo

foo内容作为wc文件的输入。


ps | more

ps输出将被分页,根据显示器尺寸显示。

包装器

包装器常常源于需要制定参数来修改被调用程序的行为。

Bernstein 链

和管道类似,不过每个继发阶段的程序取代了前一阶段的程序,并不是与之并行。

  • 类似于流程图,层层传递的流程。
  • 不能重回上一个流程。

从进程

主从进程通过内部处理状态处理他们之间的协议以避免发生死锁和竞争。

  • 比 shellout 更复杂更难以调试

  • 交互的条件:

    • 两者之间涉及的协议完全无足轻重;
    • 从进程是为应用协议进行通讯而设计的。
    • 允许主进程支持命令行开关或者环境变量的方式来允许调用则设置自己的从进程命令;
    • 一定程度上对从进程进行监控;

    以上这些都将有利于调试,便利于开发。

对等进程间通信

临时文件

缺点:

  • 临时文件被删除前,进程被中断,文件将成为遗留垃圾数据;
  • 如果程序中的多个实例使用同一文件名称作为临时文件名,将导致冲突。
  • 安全性:如果攻击程序知道临时文件要写入的位置,可以覆盖整个文件,可能读取生产者的进程数据,或者通过文件中插入修改,造假数据欺骗消费者进程。

优点:

  • 容易创建
  • 不容易产生死锁和竞争

信号

  • 一个进程向另一个进程发送信号(Unix 的信号是一种软中断形式,每个信号都对接受进程产生默认作用【通常是杀掉这个进程】)

套接字

通过套接字通信的两个程序通常都存在双向字节流。

  • 字节流既是按序的,又是可靠的。
  • 套接字描述符一旦获得,行为基本上和文件描述符一样。

要优雅地使用套接字,在 Unix 传统中,首先得设计这些套接字之间使用的应用协议--即一套请求和相应,能够简洁地表达程序通讯的语义。

实例:PostgreSQL(DB) Freeciv

共享内存

要求生产者和消费者程序必须在同一硬件上。

使用共享内存和信号量功能可避免通过网络栈复制数据的开销。

IPC 方法分类的更多相关文章

  1. LeetCode按照解题方法分类题目

    解题方法分类 1. 滑动窗口. 2. 双指针. 3. 快慢指针. 4. 区间合并. 5. 循环排序. 6. 原地反转链表. 7. 树上的BFS. 8. 树上的DFS. 9. 双堆. 10. 子集. 1 ...

  2. 【C#小知识】C#中一些易混淆概念总结(六)---------解析里氏替换原则,虚方法 分类: C# 2014-02-08 01:53 1826人阅读 评论(0) 收藏

    目录: [C#小知识]C#中一些易混淆概念总结--------数据类型存储位置,方法调用,out和ref参数的使用 [C#小知识]C#中一些易混淆概念总结(二)--------构造函数,this关键字 ...

  3. IIS上虚拟站点的web.config与主站点的web.config冲突解决方法 分类: ASP.NET 2015-06-15 14:07 60人阅读 评论(0) 收藏

    IIS上在主站点下搭建虚拟目录后,子站点中的<system.web>节点与主站点的<system.web>冲突解决方法: 在主站点的<system.web>上一级添 ...

  4. Python的方法分类

    1.Python的类方法,实例方法,和静态方法 class S(object): def Test(self): print("TEST") @classmethod#类方法 de ...

  5. HTTP 错误 500.19- Internal Server Error 错误解决方法 分类: Windows服务器配置 2015-01-08 20:16 131人阅读 评论(0) 收藏

    1.第一种情况如下: 解决方法如下: 经过检查发现是由于先安装Framework组件,后安装iis的缘故,只需重新注册下Framework就可以了,具体步骤如下 1 打开运行,输入cmd进入到命令提示 ...

  6. Python 数据类型,常用函数方法分类

    Python基本数据类型:(int) 字符串(str)列表(list)元组(tuple)字典(dict)布尔(bool) python中可以简单使用 类型(数据)创建或转换数据 例: #字符串转数字 ...

  7. C#退出程序方法分类

    1.this.Close();   只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),也无法干净地退出:

  8. WebSphere集群环境修改IHS端口号的方法 分类: WebSphere 2015-08-06 13:41 14人阅读 评论(0) 收藏

    参考资料:http://wenku.baidu.com/link?url=E9BkuEjJ16i9lg7l91L0-xhKCYkHV0mAnlwAeSlDCFM4TjZyk4ZVxmUu64BGd4F ...

  9. Java_方法的定义以及分类

    什么叫方法? 方法也叫做函数,实现某个功能 方法分类: 系统提供的方法: 常用的系统提供的方法:如:nextInt() next() nextDouble() print println()..... ...

随机推荐

  1. 永远不要眼高手低,Vue完整实现一套简单的增删改查CURD操作

    1: 永远不要眼高手低,看起来很简单,但是你从来没有去动手试一下,就不知道其中真正需要注意的许多细节, 2:完整code如下: 1 <!DOCTYPE html> 2 <html l ...

  2. tesseract-ocr和tesseract.exe is not installed or it's not in your path问题解决

    一.解决方案: 1.http://www.ddooo.com/softdown/94968.htm   打开下载的压缩包,找到"tesseract-ocr-setup-3.02.02.exe ...

  3. Android Layout属性

    通用属性 android:layout_height android:layout_width 值 含义 fill_parent/match_parent 高度或者宽度对齐到父控件 wrap_cont ...

  4. 剑指 Offer 14- II. 剪绳子 II + 贪心 + 数论 + 快速幂

    剑指 Offer 14- II. 剪绳子 II 题目链接 因为有取模的操作,动态规划中max不能用了,我们观察:正整数从1开始,但是1不能拆分成两个正整数之和,所以不能当输入. 2只能拆成 1+1,所 ...

  5. 剑指 Offer 13. 机器人的运动范围 + 深搜 + 递归

    剑指 Offer 13. 机器人的运动范围 题目链接 package com.walegarrett.offer; /** * @Author WaleGarrett * @Date 2020/12/ ...

  6. POJ-2516(最小费用最大流+MCMF算法)

    Minimum Cost POJ-2516 题意就是有n个商家,有m个供货商,然后有k种商品,题目求的是满足商家的最小花费供货方式. 对于每个种类的商品k,建立一个超级源点和一个超级汇点.每个商家和源 ...

  7. NewSQL分布式数据库,例如TIDB用K/V的底层逻辑

    内容参考 对分布式对定义参考这篇文章: 微服务都想用,先把分布式和微服务之间的关系说清楚 对分布式架构中心或无中心对比参考这篇文章: 分布式存储单主.多主和无中心架构的特征与趋势 对HDFS对内部机制 ...

  8. Docker 一图胜千言

    Docker 一图胜千言 0 为什么 Docker 比虚拟机快? 注:少了一层抽象层( Hypervisor ) 1 Docker Logo 要素: 大海 宿主机 Host 鲸鱼 Docker 集装箱 ...

  9. Gevent高并发网络库精解

    进程 线程 协程 异步 并发编程(不是并行)目前有四种方式:多进程.多线程.协程和异步. 多进程编程在python中有类似C的os.fork,更高层封装的有multiprocessing标准库 多线程 ...

  10. python 集合详解

    字符串 一个个字符组成的有序的序列,时字符的集合 使用单引,双引,三引 引住的字符序列 字符时不可变的对象 bytes定义 bytes不可变字节序列 使用b前缀定义 只允许基本ASCII使用字符形式 ...