首页 > 系统相关 >进程通信基础

进程通信基础

时间:2022-10-06 10:32:33浏览次数:41  
标签:进程同步 int 基础 通信 FIFO mode 进程

进程同步与进程通信很容易混淆,它们的区别在于:

  • 进程同步:控制多个进程按一定顺序执行;
  • 进程通信:进程间传输信息。

进程通信是一种手段,而进程同步是一种目的。也可以说,为了能够达到进程同步的目的,需要让进程进行通信,传输一些进程同步所需要的信息。

  1. 管道

管道是通过调用 pipe 函数创建的,fd[0] 用于读,fd[1] 用于写。

#include <unistd.h>
int pipe(int fd[2]);

它具有以下限制:

  • 只支持半双工通信(单向交替传输);
  • 只能在父子进程或者兄弟进程中使用。 请添加链接描述
  1. FIFO

也称为命名管道,去除了管道只能在父子进程中使用的限制。

#include <sys/stat.h>
int mkfifo(const char *path, mode_t mode);
int mkfifoat(int fd, const char *path, mode_t mode);

FIFO 常用于客户-服务器应用程序中,FIFO 用作汇聚点,在客户进程和服务器进程之间传递数据。

<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/2ac50b81-d92a-4401-b9ec-f2113ecc3076.png"/> </div><br>

  1. 消息队列

相比于 FIFO,消息队列具有以下优点:

  • 消息队列可以独立于读写进程存在,从而避免了 FIFO 中同步管道的打开和关闭时可能产生的困难;
  • 避免了 FIFO 的同步阻塞问题,不需要进程自己提供同步方法;
  • 读进程可以根据消息类型有选择地接收消息,而不像 FIFO 那样只能默认地接收。
  1. 信号量

它是一个计数器,用于为多个进程提供对共享数据对象的访问。

  1. 共享存储

允许多个进程共享一个给定的存储区。因为数据不需要在进程之间复制,所以这是最快的一种 IPC。

需要使用信号量用来同步对共享存储的访问。

多个进程可以将同一个文件映射到它们的地址空间从而实现共享内存。另外 XSI 共享内存不是使用文件,而是使用内存的匿名段。

  1. 套接字

与其它通信机制不同的是,它可用于不同机器间的进程通信。

标签:进程同步,int,基础,通信,FIFO,mode,进程
From: https://blog.51cto.com/u_14068620/5733440

相关文章

  • React组件之间的通信方式总结(下)
    一、写一个时钟用react写一个每秒都可以更新一次的时钟importReactfrom'react'importReactDOMfrom'react-dom'functiontick(){letele=<h1>{new......
  • React组件之间的通信方式总结(上)
    先来几个术语:官方我的说法对应代码ReactelementReact元素letelement=<span>A爆了</span>Component组件classAppextendsReact.Component{}无Ap......
  • 今天重新学习java基础的时候遇到了一个好玩的问题。换了环境变量jdk还是显示原来版本
    今天学习ES,需要用到更高版本的jdk(我以前用的是1.8),所以要更改以前的jdk设置,总体步骤如下:1.下载jdk-11,解压2.打开环境变量配置,把以前配置的JAVA_HOME的改为新jdk-11的路径......
  • 使用 PSAPI 库枚举进程 EnumProcesses()函数
    使用PSAPI库枚举进程在WindowsNT中,创建进程列表使用PSAPI函数,这些函数在PSAPI.DLL中。这个文件是随PlatformSDK一起分发的:使用这个库所需的PSAPI.h和PSAP......
  • JUC必要掌握(Synchronized,Lock,可重入锁ReentrantLock,可重入锁,读写锁,自旋锁,线程间通信,集
    本文已参与「新人创作礼」活动,一起开启掘金创作之路1.锁(Synchronized和lock)1.1Synchronized(1)Synchronized是Java内置的关键字,是Java内置的锁机制。(2)Synchronized的作......
  • 超详细Java基础-接口
    茫茫人海千千万万,感谢这一秒你看到这里。希望我的文章能对你的有所帮助!共勉!愿你在未来的日子,保持热爱,奔赴山海!Java基础知识(接口)接口Java接口是一系列方法的声明,是......
  • 进程程序替换
    程序替换原理:1.将磁盘中的程序,加载如内存结构2.重新建立页表映射,谁执行程序替换,就重新建立谁的映射(子进程)效果:让我们的父进程和子进程彻底分离,并让子进程执行一个全新......
  • 超详细Java基础-多态
    茫茫人海千千万万,感谢这一秒你看到这里。希望我的能对你的有所帮助!共勉!愿你在未来的日子,保持热爱,奔赴山海!Java基础知识(多态)多态多态就是指程序中定义的引用变量所......
  • python基础知识回顾
    与用户交互关键字input('需要用户输入的内容')在python2中,需要自己定义input输入的数据类型,在python3统一处理为字符串print('打印的内容)print自带换行......