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. 基于keras实现的中文实体识别

    1.简介 NER(Named Entity Recognition,命名实体识别)又称作专名识别,是自然语言处理中常见的一项任务,使用的范围非常广.命名实体通常指的是文本中具有特别意义或者指代性非常强 ...

  2. 01.从0实现一个JVM语言之架构总览

    00.一个JVM语言的诞生过程 文章集合以及项目展望 源码github地址 这一篇将是架构总览, 将自顶向下地叙述自制编译器的要素; 文章目录 01.从0实现一个JVM语言之架构总览 架构总览目前完成 ...

  3. 永恒之蓝(MS17-010)检测与利用

    目录 利用Nmap检测 MSF反弹SHELL 注意 乱码 参考 利用Nmap检测 命令: nmap -p445 --script smb-vuln-ms17-010 [IP] # 如果运行报错,可以加 ...

  4. C++的标识符的作用域与可见性

    下面是关于C++的标识符的作用域与可见性学习记录,仅供参考 标识符的作用域与可见性 作用域是一个标识符在程序正文中有效的区域. 作用域分类 ①函数原型作用域 ②局部作用域(快作用域) ③类作用域 ④文 ...

  5. JDBC概要

    JDBC基础应用 JDBC是Java连接数据库的一套接口,可以让我们方便的在Java中使用数据库.掌握JDBC的使用是Java开发的基本功. 预备工作 导入jar包.根据使用的数据库软件导入相应的ja ...

  6. 【ZeyFraのJavaEE开发小知识03】@DateTimeFomat和@JsonFormat

    关于在Element UI的el-dialog组件中使用echarts的问题 问题描述: "Cannot read property 'getAttribute' of null" ...

  7. 基于dlib+django+python 实现web端人脸打卡

    face_recognition 基于python+django+dlib实现的人脸打卡系统 开始之前 windows用户需要安装 VS2017 其他VS版本也行 linux用户需要安装c++编译器( ...

  8. mysql创建读写账号及服务相关优化配置

    grant select on xoms_prod.* to 'kzcf'@'%' identified by '123456'; 赋权多权限就   grant select,update,delet ...

  9. Go Module实战:基于私有化仓库的GO模块使用实践

    新年开工近一月,2021 年第一期 Open Talk 定档 3 月 18 日晚 8 点,本期我们邀请到了又拍云资深后端开发工程师刘云鹏和我们一起聊聊 Go 最新特性 Go Module 实战. 刘云 ...

  10. 关于ORACLE数据库跨库调用序列的解决办法

    问题  ORACLE  数据库   用户1   xscg  有序列      seq_S_ATTACHMENT_INFO.nextval         我要在  用户2   xsds   里面调用 ...