`
gaojingsong
  • 浏览: 1196775 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

【进程间通信方式】

阅读更多

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

  

IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。



 

进程间的通信方式

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

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

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

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

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

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

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

 

管道包括三种:

1)普通管道PIPE, 通常有两种限制,一是单工,只能单向传输;二是只能在父子或者兄弟进程间使用.

2)流管道s_pipe: 去除了第一种限制,为半双工,可以双向传输.

3)命名管道:name_pipe, 去除了第二种限制,可以在许多并不相关的进程之间进行通讯.

 

 

IPC目的

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

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

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

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

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

进程通过与内核及其它进程之间的互相通信来协调它们的行为。Linux支持多种进程间通信(IPC)机制,信号和管道是其中的两种。除此之外,Linux还支持System V 的IPC机制(用首次出现的Unix版本命名)。

  • 大小: 15.3 KB
0
0
分享到:
评论

相关推荐

    进程间通信方式

    ### 进程间通信方式详解 #### 一、引言 在计算机系统中,进程作为基本的执行单元,每一个进程都有自己的独立地址空间。不同进程间的通信(Inter-Process Communication,IPC)是操作系统中的一个重要概念,它使得...

    Linux进程间通信方式之socket使用实例

    ### Linux进程间通信方式之socket使用实例详解 #### 一、引言 在现代操作系统中,进程间的通信(IPC)是实现多进程协同工作的重要手段之一。Linux提供了多种进程间通信的方法,包括信号量、消息队列、共享内存以及...

    linux-linux进程间通信方式汇总.zip

    本文将全面解析Linux中的各种进程间通信方式,帮助你深入理解这一核心概念。 首先,我们来了解一下什么是进程。在操作系统中,进程是程序执行时的一个实例,每个进程都有自己的内存空间和系统资源。为了实现进程间...

    Linux下的进程间通信 详解

    管道是一种非常基础且实用的进程间通信方式,它可以分为无名管道和有名管道。 ##### 1. 无名管道 无名管道主要用于父子进程之间的通信。在父子进程中,父进程创建一个管道并将其描述符传递给子进程,然后父子进程...

    线程间的通信、同步方式与进程间通信方式1

    3. **进程间通信方式** - **低级通信**:这类通信主要涉及控制信息的交换,如同步、互斥、进程终止和挂起,通常通过信号、管程等机制实现。 - **高级通信**:涉及大量数据交换,如管道、消息队列、共享内存等。 ...

    linux进程间通信与同步.pdf

    4. **消息队列(Message Queue)**:消息队列是一种高级的进程间通信方式,允许多个进程发送消息到队列中,这些消息会被其他进程接收。 5. **共享内存(Shared Memory)**:共享内存是效率最高的进程间通信方式之一,它...

    进程间通信

    七种进程间通信方式: 一.无名管道( pipe ) 二.有名管道( fifo ) 三.共享内存 ( shared memory ) 四.信号 ( sinal ) 五.消息队列 ( message queue ) 六.信号量 ( semophore ) 七.套接字 ( socket ) 进程间通信...

    基于RT-Linux的数控系统进程间通信方式的研究.pdf

    【标题】:基于RT-Linux的数控系统进程间通信方式的研究 【描述】:这篇研究主要探讨了如何在RT-Linux环境下优化数控系统的进程间通信性能。 【标签】:Linux操作系统,系统开发,参考文献,专业指导 【部分内容】:...

    进程间通信之信号 sinal ) 完整代码

    七种进程间通信方式: 一 无名管道( pipe ) 二 有名管道( fifo ) 三 共享内存 shared memory 四 信号 sinal 五 消息队列 message queue ) 六 信号量 semophore 七 套接字 socket 以上七种进程间通信的完整...

    linux 操作系统进程间通信 ppt

    其中,管道通信是 Linux 操作系统中最基本的一种进程间通信方式,通过在进程之间创建一个管道来实现数据的传递。信号通信是通过信号来实现进程间的通信,信号可以是同步的也可以是异步的。共享存储区通信是通过在...

    进程间通信源码

    7. **信号(Signal)**:信号是一种简单的进程间通信方式,用于向进程发送通知或中断请求,但不携带信息。 在描述中提到的“源码优化”和“测试过”,意味着这份源码可能已经过精心调整,提高了性能并解决了已知的...

    Linux进程间通信

    Linux提供了多种进程间通信方式,包括管道(Pipe)、有名管道(FIFO)、消息队列(Message Queue)、信号量(Semaphore)、共享内存(Shared Memory)、套接字(Socket)以及信号(Signal)等。接下来,我们将详细...

    进程间通信的6种方式

    以下是对标题和描述中提及的六种进程间通信方式的详细解释: 1. **用户自定义消息**:在Windows操作系统中,进程可以通过发送自定义消息来实现通信。一个进程可以通过`PostMessage`或`SendMessage`函数向其他进程...

    进程间通信方式函数

    在《进程间通信(IPC).doc》文档中,可能详细介绍了这四种通信方式的使用方法、优缺点、示例代码以及在实际项目中的应用案例。通过深入学习和理解这些内容,开发者能够更好地设计和实现多进程间的协作,提升系统的...

    Linux进程间通信.pdf

    本文将深入探讨Linux下的进程间通信方式,包括其基本原理、主要技术手段及其应用场景。 #### 进程间通信的重要性 在多进程环境中,进程间通信是必不可少的。无论是简单的数据交换还是复杂的任务协调,IPC都是实现...

    进程间通信--操作系统实验

    实验将涉及四种主要的进程间通信方式: 1. **管道通信**:管道是一种半双工通信方式,数据只能单向流动。它利用文件系统中的匿名管道,允许一个进程写入数据,另一个进程读取。管道的容量有限,且不支持随机访问,...

    Messenger进程间通信

    总之,`Messenger`提供了一种简单、直观的进程间通信方式,适用于需求不复杂、数据量小的场景。理解和熟练掌握`Messenger`的使用,对于提升Android应用的健壮性和用户体验至关重要。在实际项目中,根据具体需求选择...

Global site tag (gtag.js) - Google Analytics