• 进程间的通信方式


    什么是进程通信

    进程通信就是进程之间的信息交换
    进程是资源管理的基本单位,因此各个进程拥有的内存地址空间相互独立
    在这里插入图片描述

    进程间的通信方式

    为了保证安全,一个进程不能直接访问另一个进程的地址空间。但是进程之间的信息交换又是必须实现的,为了保证进程间的安全通信,操作系统提供了一些方法
    在这里插入图片描述

    通信方式—共享内存

    1.两个或多个进程共享一个给定的存储区,通信速度最快,进程是直接对内存进行存取
    2.两个进程对共享空间的访问必须是互斥的,当进程1向共享空间中写数据时,进程2不能访问共享空间
    在这里插入图片描述

    通信方式—管道通信

    “管道”是指用于连接读写进程的一个共享文件。

    • 管道只能采用半双工通信,某一时间段内只能实现单向的传输。如果要实现双向同时通信,则需要设置两个管道
    • 各进程要互斥的访问管道。在下图中,进程1会一直向管道写数据,直到数据写满,进程2才会向外读数据,所有数据被读出后,进程1才会向管道读数据
    • 数据以字符流的形式写入管道,当管道写满时,写进程的write()系统调用将被阻塞,等待读进程将数据取走。当读进程将数据全部取走后,管道变空,此时读进程的read()系统调用将被阻塞

    在这里插入图片描述

    匿名管道

    管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。

    命名管道

    有名管道也是半双工的通信方式,以磁盘文件的方式存在,可以实现本机任意两个进程之间的通信。

    高级管道

    将另一个程序当做一个新的进程在当前程序进程中启动,则它算是当前程序的子进程,这种方式我们成为高级管道方式。

    通信方式—信号

    信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

    通信方式—信号量

    信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。

    通信方式—消息队列

    消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。消息队列起信箱作用,到了就挂在那里,需要的时候去取。消息队列提供了一种在两个不相关进程间传递数据的简单有效的方法。与命名管道相比:消息队列的优势在于,它独立于发送和接收进程而存在,这消除了在同步命名管道的打开和关闭时可能产生的一些困难。

    通信方式—套接字

    套接字也是一种进程间通信机制,它主要用于客户端和服务端之间通过网络进行通信,套接字是支持TCP/IP的网络通信的基本操作单位,可以看作是不同主机之间的进程进行双向通信的端点,简单来说就是通信双方的一种约定,用套接字中的相关函数完成通信过程

  • 相关阅读:
    Node安装及配置
    手把手教你uniapp接入聊天IM即时通讯功能-源码分享
    类和对象(封装)
    【云原生】容器服务(K8s版)使用 Kubectl 部署 web 服务到 K8s 集群
    【环境配置】使用VMware配置Ubuntu虚拟机集群
    如何使用rclone将腾讯云COS桶中的数据同步到华为云OBS
    【微信开发】[JAVA实现]微信公众号网页授权登录
    SSM出租车查询系统 毕业设计-附源码220915
    P1223 排队接水 【贪心】
    【无标题】
  • 原文地址:https://blog.csdn.net/Qiaoshurui/article/details/126428554