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. MYSQL bin_log 开启及数据恢复

    参考博客: A:https://www.jianshu.com/p/55b0d52edca2 B:https://www.cnblogs.com/martinzhang/p/3454358.html ...

  2. Virtual DOM 简直就是挥霍

    彻底澄清"Virtual DOM 飞快"的神话. 注意:原文发表于2018-12-27,随着框架不断演进,部分内容可能已不适用. 近年来,如果你有使用过 JavaScript 框架 ...

  3. 配置Nginx的坑及思路

    我配置的是Django + uwsgi + Nginx 说下思路,先进行模块化测试: Django: Django 下 第一个坑是sql版本低问题,原因用pip安装不正确,在网上查了下按这个文章重装下 ...

  4. 使用Maven新建SpringBoot工程

    最近用IDEA插件创建Springboot项目,总是403,估计被墙了! 那么这里在提供两种方法 1.从官网下载模板,导入IDEA内 2.使用Maven创建 方法一:打开 https://start. ...

  5. Pyqt5——带图标的表格(Model/View)

    需求:表格中第一列内容为学生学号,为了突出学号的表示,在第一列的学号旁增加学号图标. 实现:(1)使用Qt的model-view模式生成表格视图. (2)重写代理(QAbstractItemDeleg ...

  6. 记一次Drone无法触发构建的问题

    问题 好巧不巧,当你晚上准备上线的时候,在下午临近下班的时候CI&CD工具出问题了,提交代码不能触发构建,不能上线了,Drone平台那边也下班了,正好CICD依赖的公司git仓库也出问题了(就 ...

  7. 记录 Allsec 解题过程

    开局打开URL:http://119.3.191.245:65532/#/allsecPlayGame,前去做游戏 游戏URL:http://119.3.191.245:8877/Login.php ...

  8. &#128681;数分工作了三年,我干了件很酷的事情

    从17年毕业来,一直都在干数据分析的工作.和很多转行的小伙伴一样,没有对口的科班学习,摸不清数据分析具体情况,起初充满着很多迷茫. 在刚开始的1年半中,都是自己从淘宝买些课程,最多时,网盘放了4-5T ...

  9. 【数据结构与算法】——队列(Queue)

    队列(Queue)的一个使用场景 银行排队的案例: 队列(Queue)介绍 队列是一个有序列表,可以用数组或是链表来实现. 遵循先入先出的原则.即:先存入队列的数据,要先取出来.后存入的要后取出来. ...

  10. android分析之Binder 02

    分析Java层的ServiceManager,看看Binder在Java层是如何实现的. public final class ServiceManager { private static fina ...