理解几种常见的进程间通信方式

理解几种常见的进程间通信方式什么是进程间通信广义上讲,进程间通信(Inter-ProcessCommunication,IPC)是指运行在不同进程(不论是否在同一台机器)中的若干线程间的数据交换。从上面的定义可以得出两点:参与通信的进程即可以运行在同一台机器上,也可以运行在各自的设备环境中(RemoteProcedureCallProtocol,RPC)。如果进程是跨机器运行的,则通常是由网络连接在一起。实现方

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

什么是进程间通信

广义上讲,进程间通信(Inter-Process Communication, IPC)是指运行在不同进程(不论是否在同一台机器)中的若干线程间的数据交换。

从上面的定义可以得出两点:

  • 参与通信的进程即可以运行在同一台机器上,也可以运行在各自的设备环境中(Remote Procedure Call Protocol, RPC)。如果进程是跨机器运行的,则通常是由网络连接在一起。
  • 实现方式可以有多种多样。原则上,任何跨进程的数据交换都可以称为进程间通信。

常见的几种进程间通信方式

共享内存(Shared Memory)

共享内存是一种常见的进程间通信机制。由于两个进程可以直接访问同一块儿内存区域,减少了数据的复制操作,因而在速度上的优势比较明显。

一般情况下,实现内存共享的步骤如下:

  1. 创建内存共享区

    内存共享区存在于内核中

  2. 映射内存共享区

    需要将内存共享区映射到进程的空间中才可以进一步操作

  3. 访问内存共享区

  4. 进程间通信

    由于内存共享本身并没有提供同步机制,所遇参与通信的各个进程需要自己协商处理。

  5. 撤销内存映射区

  6. 删除内存共享区

管道(Pipe)

管道这个词很形象地描述了通信双方的行为:

  • 分别处于管道的两方,进行数据传输通信。
  • 管道是单向的,如果一个进程既要读又要写,需要建立两根管道。类似于水管的特性。
  • 管道的两端分别为”读取端”(read end)和”写入端”(write end)。

管道的局限性

  • 生命周期是随进程结束而完结
  • 只能用于具有亲缘关系的进程通信
  • 管道是匿名的,没有名字

为了克服管道上述的局限性,可以使用命名管道(Named Pipe)。它具有管道所有的功能,并且没有管道的上述局限。

套接字(Socket)

其实网络通信中所使用的API与跨进程使用的是完全一样的。

两种角色:服务器与客户端。
每种角色的大致流程如下:

服务器:

  • Create socket – socket()
  • Bind sockaddr – bind()
  • Listen – listen()
  • Wait & Accept
    • 一般在一个循环里边监听是否有新的连接 – accept();然后可以读写了
    • 读 – recv()
    • 写 – send()
    • 关闭连接与客户端的连接 – close()
  • 释放socket close()

客户端:

  • Create socket – socket()
  • Bind sockaddr – bind()
  • 连接服务器 – accept();然后可以读写了
  • 读 recv()
  • 写 send()
  • 关闭连接 close()

注意,如果服务器与客户端在同一台主机上,则是跨进程通信。如果在不同的主机上,则变成了网络通信。

消息队列(Message Queue)

信号(Signal)

信号量(Semophore)

参考

  1. Java进程通信
  2. Linux进程间通信方式–本地socket
  3. 进程间通信——socket
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/184029.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • U盘中毒了?教你如何删除System Volume Information这个顽固文件夹「建议收藏」

    U盘中毒了?教你如何删除System Volume Information这个顽固文件夹「建议收藏」不得不说cmd命令很好用呢。最近我的U盘中毒了,格式化都删除不了SystemVolumeInformation这个顽固的文件夹,真心伤不起哇!还好现在解决了问题。看来以后得好好对待U盘,不能乱用了。本篇文章教大家如何删除SystemVolumeInformation这个顽固文件夹。希望对你有用。我的电脑是win10,win+R搜索cmd,启用cmd命令编辑器,并输入以下命令:attrib…

    2022年9月17日
    0
  • TensorFlow中学习率[通俗易懂]

    TensorFlow中学习率[通俗易懂]学习率学习率属于超参数。学习率决定梯度下降速度的快慢,学习率越大,速度越快;学习率越小,速度越慢。如果学习率过大,很可能会越过最优值;反而如果学习率过小,优化的效率可能过低,长时间算法无法收敛。所以学习率对于算法性能的表现至关重要。指数衰减学习率指数衰减学习率是在学习率的基础上增加了动态变化的机制,会随着梯度下降变化而动态变化tf.train.expo…

    2022年6月1日
    47
  • 编程语言与Python介绍

    编程语言与Python介绍一、编程语言的分类1.机器语言:计算机能直接理解的二进制指令(10101010101)优点:执行速度快缺点:开发效率非常低2.汇编语言:通过英文字符组成代表一组二进制指令优点:开发效率相较

    2022年7月6日
    18
  • Linux安装mariadb_sql数据库安装失败

    Linux安装mariadb_sql数据库安装失败1.下载MariaDB数据库测试:当前虚拟机是否可以正确的链接外网.命令:[root@localhostsrc]#yuminstallmariadb-server2确认下载3安装完成提示4数据库启动命令: 1.启动命令[root@localhostsrc]#systemctlstartmariadb 2.重启命令[root@localhostsrc]#systemctlrestartmariadb 3.

    2022年10月17日
    0
  • vue.js与jquery的区别_说出两者之间的区别

    vue.js与jquery的区别_说出两者之间的区别jQuery:曾经是前端最流行的js库。Vue:是一个兴起的js库,是一个精简的MVVM。从技术角度讲。Vue.js专注于MVVM模型的ViewModel层,它通过双向数据绑定把view和Model层连接起来,通过对数据的操作完成对页面视图的渲染。二者的区别是:一、Vue和jQuery对比jquery是使用选择器()选取DOM对象,对其进行赋值、取值、事件绑定等操作,和原生的HTML的区别只在于可以更方便的选取和操作DOM对象,而数据和界面是在一起的。二、Vue则是通过Vue对.

    2022年10月16日
    0
  • apache的安装与配置_apache2.4安装教程

    apache的安装与配置_apache2.4安装教程准备安装包到https://www.apachelounge.com/download/下载你需要的Apache安装包(注意需要相应的VC运行库)解压文件到指定安装目录3.替换安装路径使用文本编辑器打开Apache的配置文件conf/httpd.conf执行文本替换将”c:/Apache24”全部替换成(你自己解压的路径)“G:\web\apache2.4”4

    2022年9月21日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号