简述

进程间通信,就是在不同进程之间传播或交换信息。那么不同进程之间存在着什么双方都可以访问的介质呢?进程的用户空间是互相独立的,一般而言是不能互相访问的,唯一的例外是共享内存区。但是,系统空间却是“公共场所”,所以内核显然可以提供这样的条件。除此以外,那就是双方都可以访问的外设了。在这个意义上,两个进程当然也可以通过磁盘上的普通文件交换信息,或者通过“注册表”或其它数据库中的某些表项和记录交换信息。广义上这也是进程间通信的手段,但是一般都不把这算作“进程间通信”。

进程间通信(IPC-Interprocess communication)是一组编程接口,能够让程序员协调不同的进程,使之能在一个操作系统里同时运行。这使得一个程序能够在同一时间里处理许多用户的要求。因为即使只有一个用户发出要求,也可能导致一个操作系统中多个进程的运行,进程之间必须互相通话。IPC接口就提供了这种可能性。每个IPC方法均有自己的优点和局限性,因此,对于单个程序而言使用所有的IPC方法并不常见。

  • 简述
  • 通信目的
  • 通信方式
  • Qt进程通信
    • TCPIP
    • Shared Memory
    • D-Bus
    • QProcess
    • Session Management
  • 更多参考

通信目的

  • 数据传输:
    一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间。

  • 共享数据:
    多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到。

  • 通知事件:
    一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。

  • 资源共享:
    多个进程之间共享同样的资源。为了作到这一点,需要内核提供锁和同步机制。

  • 进程控制:
    有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。

进程通过与内核及其它进程之间的互相通信来协调它们的行为。Linux支持多种进程间通信(IPC)机制,信号和管道是其中的两种。

通信方式

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

  • 有名管道(named pipe):
    有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。

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

  • 消息队列(message queue):
    消息队列就是消息的一个链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

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

  • 共享内存(shared memory):
    共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。

  • 套接字(socket):
    套接字也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。

Qt进程通信

在Qt应用程序中,Qt提供了几个方法来实现进程间通信(IPC)。可以在助手中查找关键字”Inter-Process”进行查找。

TCP/IP

跨平台的Qt Network模块提供的类可以让网络编程更加便携和方便。它提供了高级类(例如:QNetworkAccessManager、QFtp)通信,使用特定的应用程序级协议,和较底层的类(例如:QTcpSocket、QTcpServer、QSslSocket)用于实现协议。

Shared Memory

跨平台的QSharedMemory-共享内存类,提供对操作系统的共享内存的实现。它允许多个线程和进程安全访问共享内存段。此外,QSystemSemaphore可以用来控制访问由系统共享的资源,以及进程之间的通信。

D-Bus

Qt的D-Bus模块是一种可用于使用D-Bus协议实现IPC的唯一Unix库。它将Qt的信号和槽机制延伸到IPC级别,允许由一个进程发出的信号被连接到另一个进程的槽。Qt的D-Bus文档已经详细说明如何使用Qt中的D-Bus模块。

QProcess

跨平台类QProcess可以用于启动外部程序作为子进程,并与它们进行通信。它提供了用于监测和控制该子进程状态的API。另外,QProcess为从QIODevice继承的子进程提供了输入/输出通道。

Session Management

在Linux/X11平台上,Qt提供了会话管理的支持。会话允许事件传播到进程,例如,当检测到关机时。进程和应用程序可以执行任何必要的操作,例如:保存打开的文档。

更多参考

  • Qt之进程间通信(Windows消息)
  • Qt之进程间通信(共享内存)
  • Qt之进程间通信(QProcess)
  • Qt之进程间通信(TCP/IP)

Qt之进程间通信(IPC)相关推荐

  1. Qt 之进程间通信(IPC)

    Qt 之进程间通信(IPC) 简述 通信目的 通信方式 Qt进程通信 TCP/IP Shared Memory D-Bus QProcess Session Management 更多参考 QT5软件 ...

  2. 【Qt】进程间通信之QSharedMemory示例

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 编程步骤 04. 写端程序示例 05. 读端程序示例 06. 附录 01. 概述 QSharedMemory提供了多个线程 ...

  3. Linux进程+进程间通信IPC

    一 Linux进程 1) 进程的内存映像 2)解释 BSS段:在采用段式内存管理的架构中,BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英文Bloc ...

  4. 进程间通信 IPC、LPC、RPC

    原文请见:进程间通信IPC.LPC.RPC 进程间通信(IPC,Inter-Process Communication),指至少两个进程或线程间传送数据或信号的一些技术或方法.进程是计算机系统分配资源 ...

  5. Qt 之进程间通信(TCP/IP)

    Qt 之进程间通信(TCP/IP) 原创 一去丶二三里 发布于2016-02-04 10:19:46 阅读数 15428 收藏 更新于2018-05-30 10:35:06 分类专栏: Qt < ...

  6. 详解操作系统之进程间通信 IPC (InterProcess Communication)

    进程间通信(IPC,Inter-Process Communication),指至少两个进程或线程间传送数据或信号的一些技术或方法. 进程是计算机系统分配资源的最小单位(严格说来是线程).每个进程都有 ...

  7. Android中进程间通信(IPC)方式总结

    IPC为进程间通信或跨进程通信,是指两个进程进行进程间通信的过程.在PC和移动设备上一个进程指的是一个程序或者一个应用,所以我们可以将进程间通信简单理解为不同应用之间的通信,当然这种说法并不严谨. 在 ...

  8. 漫谈QNX(架构/进程,线程,同步,进程间通信IPC)

    (1)架构 说起Blackberry的QNX操作系统, 想必大家都听说过,但到底为什么QNX能如此有名?难道微软的Windows和Linux都不能与之抗衡? 美国NASA的太空接驳飞船也使用QNX操作 ...

  9. linux:进程间通信 IPC

    文章目录 1.管道 1.1.匿名管道 1.2.有名管道 2.信号 3.共享内存 3.1.共享内存接口 3.1.1.生成 key 值 3.1.2.创建共享内存 3.1.3.创建共享内存映射 3.1.4. ...

最新文章

  1. 优达学城python项目P1:搜索和探索近地天体(NEOs)
  2. 【Qt】Qt动态库和静态库的创建和使用
  3. 5首页加载慢_UIViewController 预加载方案浅谈
  4. 计算机组装与维修说课稿,大班《生活中的数字》说课稿
  5. 机器人学习--Carnegie Mellon University 认知机器人学课程
  6. Qt程式异常崩溃处理技巧(Win)
  7. SAP FSM 学习笔记(二) : SAP FSM的微信接入
  8. WPF学习笔记(二):初学者避坑实录
  9. [TypeScript] vs code TSLint常见错误解决方案
  10. 多线程,多进程实例对比
  11. 分布式系统设计理念为何这么难学?
  12. 马库斯:DeepMind新出的机器心智网络不错,但有误导性
  13. Navicat无法连接SqlServer数据库
  14. Android ANR原因以及开发时如何预防
  15. 图档生成bin文件_「嵌入式笔记」hex文件、bin文件、axf文件的区别?
  16. BarTender数据批量打印软件的入门操作
  17. 学习笔记5-二层冗余链路
  18. 在用友U8V13.0erp软件供应链管理的存货核算模块中正常单据记账后,查看存货核算的收发存汇总表时,发现存货有数量但没有结存金额,应如何调整?
  19. 微信支付和分享到朋友圈-struts版本
  20. 手机外接usb摄像头软件下载_手机打碟app下载安装_手机打碟软件最新版免费下载...

热门文章

  1. 集成学习(ensemble learning)(二)
  2. GitHub上如何进行PR(Pull Request)操作——简版
  3. 让用户故事真的像故事那样
  4. android布局加色,android – 如何以编程方式将LinearLayout添加背景颜色,并将权重添加到另一个布局...
  5. 神策数据张涛:企业服务客户全生命周期运营三步曲:执行反馈
  6. 神策数据张涛:如何让用户标签价值落地?
  7. 金融实战篇:最佳数据驱动之城商行
  8. 图解HTTP学习记录(六)
  9. python argpare 模块的简单用法
  10. LLVM3.8停止了旧Windows版本,取消Autoconf,改进Clang