zoukankan      html  css  js  c++  java
  • 重新整理操作系统概念系类——进程通信

    前言

    介绍一下进程之间的通信,以及我在工作中对于进程通信的选择。

    为什么有这个进程通信的概念呢。

    实际上是因为进程是一个独立的运行单位,它分配的内存地址不能够被其他进程访问,这样的设计其实是为了安全。

    但是有时候我们进程之间需要交换信息,那么怎么办呢?操作系统给了我们路口。

    进程通信有下面几种方式:

    图:

    正文

    共享存储

    看图:

    举个栗子。

    不知道各位有没有开发过android,android app之间是如何通信的呢?

    app肯定是不同的进程,他们有一种Ashmem来实现共享内存,有兴趣可以看看。

    管道通信

    管道是指用于连接读写进程的一个共享文件,又名pipe 文件。其实就是在内存中开辟一个大小固定的缓冲区。

    注:管道只能采用半双工通信,某一段时间内只能实现单项的传输。如果要实现双通道,那么要两根。
    

    它的运作方式是这样的,比如说进程一写完了数据后,进程二才能去读取数据。

    这种管道是1对1的概念,只能一个进程对另外一个进程,而不能1对多。

    因为是这样子的,只有管道写满之后,另外一个进程才能读取,在另外一个进程读取完毕之后,前面一个进程才能继续写。

    所以说管道通信其实是有非常严格的要求的。

    消息传递

    进程间的数据交换以格式化的消息为单位。进程通过操作系统提供的"发送消息/接收消息"两个原语来进行数据交换。

    具体操作如下:

    消息传递有两种方式,一种是直接通信方式,一种是间接通信方式。

    直接通信是这样子的,一个进程通过发送原语发送消息,这些消息操作系统会把这些消息挂载到目的进程消息缓存队列中,如果目的进程需要接收,那么目的进程可以通过接收原语接收。

    所谓原语,一般是指由若干条指令组成的程序段,用来实现某个特定功能,在执行过程中不可被中断。

    间接通信方式,消息先发送到中间实体(信箱)中,因此也称“信箱通信方式”。

    形象点如下:

  • 相关阅读:
    文件映射mmap
    ubuntu查看内存占用和查看cpu使用情况的简单方法(ubuntu内存管理)
    电子类网站
    一个很不错的适合PHPER们书单,推荐给大家【转】
    图片(img标签)的onerror事件
    HTTP 头部解释
    php数据通信方式
    PHP 获取服务器详细信息【转】
    mysql数据库回滚
    微信公共平台php用$GLOBALS["HTTP_RAW_POST_DATA"]收不到信息解决方法
  • 原文地址:https://www.cnblogs.com/aoximin/p/13472433.html
Copyright © 2011-2022 走看看