精华内容
下载资源
问答
  • 进程间的通信

    2020-07-29 19:52:34
    有这个进程间通信这个概念或者说是功能出现,就代表一定有它该出现理由。例如药出现就是为了治疗疾病,超级笔记本出现就是为了解决普通笔记本厚重问题。那么进程间通信出现,是解决什么问题呢?

    1、进程间通信

    (1)概述

    先看一段来自百度百科的解释:

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

    是不是感觉顿时不想继续看了,不要紧,请继续看下去,就当自己啥也没看到上面的这段话!

    (2)我们为什么需要进程间通信

    有这个进程间通信这个概念或者说是功能的出现,就代表一定有它该出现的理由。例如药的出现就是为了治疗疾病,超级笔记本的出现就是为了解决普通笔记本厚重的问题。

    那么进程间通信出现,是解决什么问题的呢?

    答案:

    为了解决进程和进程之间共享数据的问题。

    (3)进程间通信的8种方法

    1、无名管道通信

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

    2、高级管道通信

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

    3、有名管道通信

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

    4、消息队列通信

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

    5、信号量通信

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

    6、信号

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

    7、共享内存通信

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

    8、套接字通信

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

    (4)无名管道和有名管道的联系和区别

    1、联系

    1. 通信数据只存在于内存缓冲页面中;
    2. 都是半双工通信;

    2、区别

    1. 无名管道是无名的,有名管道是有名的;
    2. 无名管道只能用于父子进程或兄弟进程之间的通信,而有名管道可用于任意两进程之间通信;
    3. 无名管道是无形的,即无名管道的 inode 结构不是在磁盘上存储的,而是临时生成的,而有名管道的 inode 结点在磁盘上。

    (5)各个通信方式的讲解

    …待补充。

    展开全文
  • 进程间的通信方式

    2019-11-27 11:25:56
    当被问到进程间的通信方式有哪几种时,估计大脑瞬间发懵,这是全新的技术或名词吗?不是的,其实我们经常会用到进程的通信方式,只是我们一直没有注意到罢了。 进程间的通信方式,有以下几种: 管道 消息队列 ...

    当被问到进程间的通信方式有哪几种时,估计大脑瞬间发懵,这是全新的技术或名词吗?不是的,其实我们经常会用到进程的通信方式,只是我们一直没有注意到罢了。

    进程间的通信方式,有以下几种:

    • 管道
    • 消息队列
    • 共享内存
    • 信号量
    • 信号
    • Socket

    1、管道

    管道分为匿名管道与命名管道。

    (1)匿名管道

    我们常用到的linux命令中的 “|” 就代表着一个匿名管道,将一个进程的执行结果输出到另外一个进程中。比如

    netstat -lnp | grep port 这个命令是查看某个端口的占用情况

    (-l 显示listen状态的端口,-n 拒绝显示别名,即将0.0.0.0:http显示为0.0.0.0:80,-p 显示相应的pid与程序名)

    (如果提示命令不存在的话,请执行yum install -y net-tools)

    匿名管道只能用于具有亲缘关系的进程之间的通信,半双工,即数据只从一个方向传输至另外一个方向。

    (2)命名管道,也称作FIFO。

    使用mkfifo <pipename>的命令用来创建一个命名管道。

    此时该进程将hello写入到命名管道pipe中,并阻塞到别的进程从该管道中读取数据为止。一直没有读取,就一直阻塞。

    下一个进程从该管道中读取后,第一个进程将会返回。

    命名管道用于两个无关进程之间的通信,但会存在同步阻塞的情况。


    2、消息队列

    消息队列能够解决命名管道的阻塞问题,a进程向b进程传递消息时,只需要将消息放进消息队列中,然后立即返回,无需阻塞。

    但是这种通信方式也有其缺点,如果a进程于b进程通信频繁,a进程需要从内存读取大量的数据到消息队列中,然后b进程需要从消息队列中拷贝大量的数据到内存中,这段过程相当耗费时间。


    3、共享内存

    系统在创建一个进程的时候,不是分配实际的物理内存,而是分配一个虚拟的内存空间。

    各个进程的虚拟内存空间彼此独立,但只要两个进程各自拿出一段虚拟内存地址,映射到相同的一块物理内存中。此时两个进程有着相同一块的物理内存,即共享一段物理内存,可以有效解决消息队列的频繁拷贝的问题。


    4、信号量

    当多个进程同时操作一块临界资源时,就会发生竞争的问题,这种问题常常发生在共享内存中。

    信号量和锁一样,用于多个进程之间的互斥与同步。

    信号量本质是一个计数器,假设当前情况下,信号量的初始值为1。当a进程对临界资源进行操作时,判断信号量的值是否大于0,如果是,代表a进程有对该资源的操作权限,然后对信号量进行减1,此时信号量变为0。在a进程还没有释放该资源的情况下,b进程想对该资源进行操作,首先判断信号量的值是否大于0,此时信号量为0,代表b进程没有对该资源操作的权限。

    只有当a进程释放资源时,信号量自动加1,b进程才可以对资源进行操作。

    两个进程通过对信号量的判断,来判断是否可以操作临界资源,这种方式也算是进程间的通信方式。


    5、信号

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

    有关信号的详细介绍,可以参考这篇文章几种常见进程间通信(IPC)方式之信号


    6、Socket

    以上几种通信方式使用在一台主机之间不同进程之间的通信,而Scoket用于不同主机之间的通信。

    一个简单的Scoket通信例子,可以参考我的另外一篇文章使用Socket完成客户端与服务端的双向通信

    展开全文
  • unix进程间的通信方式

    千次阅读 2018-09-09 20:44:37
    unix进程间的通信方式 (1)管道(Pipe):管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信。 (2)命名管道(named pipe):命名管道克服了管道没有名字的限制,因此...

    unix进程间的通信方式

    (1)管道(Pipe):管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信。

    (2)命名管道(named pipe):命名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。命名管道在文件系统中有对应的文件名。命名管道通过命令mkfifo或系统调用mkfifo来创建。

    (3)信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,又能够统一对外接口,用sigaction函数重新实现了signal函数)。

    (4)消息(Message)队列:消息队列是消息的链接表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺

    (5)共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。

    (6)内存映射(mapped memory):内存映射允许任何多个进程间通信,每一个使用该机制的进程通过把一个共享的文件映射到自己的进程地址空间来实现它。

    (7)信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。

    (8)套接口(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Unix系统上:Linux和System V的变种都支持套接字。

    展开全文
  • Linux进程间的通信方式:管道、有名管道、信号量、消息队列、共享内存、信号、socket Windows进程间的通信方式:管道、信号量、消息队列、共享内存、socket Linxu线程间的通信方式:互斥量、条件变量、信号量、...

    Linux进程间的通信方式:管道、有名管道、信号量、消息队列、共享内存、信号、socket

    Windows进程间的通信方式:管道、信号量、消息队列、共享内存、socket

    Linxu线程间的通信方式:互斥量、条件变量、信号量、信号
    Windows线程间的通信方式:互斥量、信号量、事件(Event)、临界区(Critical Section)

    展开全文
  • 操作系统中的进程间的通信机制

    千次阅读 2018-04-01 23:19:36
    (2)命名管道FIFO:有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。 (3)消息队列MessageQueue:消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少...
  • 进程间的通信——无名管道 宗旨:技术的学习是有限的,分享的精神的无限的。 一、进程间的通信 (1)同主机进程间数据交互机制:无名管道(PIPE),有名管道(FIFO)、消息队列和共享内存。无名管道多用于亲缘...
  • 进程间的通信通过与内核及其他线程间的互相通信来协调。 进程通信的应用场景 1.数据传输 一个进程需要将他的数据发送给另一个进程,发送的数据在一个字节到几兆字节之间 2.共享数据 多个进程想要操作共享数据,...
  • Android 进程间的通信 参考资料: 几种进程通信方式的对比总结 Android Binder 机制(一) Binder 的设计和框架 Android 面试收集录14 Android 进程间通信方式 一篇文章了解相见恨晚的 Android Binder 进程间通讯...
  • Windows进程间的通信-命名管道

    千次阅读 2017-06-04 22:21:47
    命名管道是一种命名的可以在管道服务器进程与管道客户进程进行单向或...命名管道既可以实现同一台电脑上的进程间的通信,也可以实现基于网络的不同电脑上的进程间的通信,当然同一个进程即可以是服务端也可以是客户端。
  • 进程间的通信IPC

    千次阅读 2011-09-15 16:22:41
    进程间的通信 进程间的通信(Inter Process Communication, IPC)问题主要有3个: (1) 一个进程如何把信息传递给另一个进程; (2) 确保两个或更多进程在关键活动中不会出现交叉; (3) 有协作关系的进程的时序...
  • Java面试--进程间的通信方式

    千次阅读 2018-08-06 07:50:59
    面试题:进程间的通信方式(VIVO、阿里巴巴面试题) 一、进程通信的目的 1、数据传输 一个进程需要将它的数据发送给另一个进程。 2、资源共享 多个进程之间共享同样的资源。 3、通知事件 一个进程需要...
  • 利用Linux的共享内存通信机制实现两个进程间的通信 2 实验思路 编写一个sender.c作为发送信息的一方,等待用户做一个输入,然后把用户输入的字符串保存到共享内存,当receive返回一个信息后根据信息返回输出。 ...
  • 我今天看了下zeromq,也用zeromq写了几个简单的例子,然后看了下它的介绍,发送支持好多通信协议,TCP、UDP、IPC 网上讲的例子都是讲TCP通信的,我想知道如果用来实现进程间的通信,这个要怎么用呢!
  • 用NSConnection实现不同进程间的通信 发表于 2012-04-10 | 分类于 pieces  | 10 条评论 在Mac应用程序开发中可能会这样做:让程序的某部分逻辑放置在一个独立的进程之中,如文件或程序的监控、Crash...
  • # 有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。 # 信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止...
  • 进程间的通信方式——pipe(管道)

    万次阅读 多人点赞 2017-05-10 00:43:13
    详解进程间通信方式———管道;管道是如何实现进程间通信的;以及管道读取数据四种方式,以及管道容量大小。
  • JAVA进程间的通信方式(IPC)

    千次阅读 2015-11-24 15:46:36
     (1)管道(Pipe):管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信。  (2)命名管道(named pipe):命名管道克服了管道没有名字的限制,除具有管道所具有的功能...
  • Python3中利用Queue实现进程间的通信

    千次阅读 2018-04-06 08:58:46
    进程间通信-QueueProcess之间有时需要通信,操作系统提供了很多机制来实现进程间的通信。1. Queue的使用可以使用multiprocessing模块的Queue实现多进程之间的数据传递,Queue本身是一个消息列队程序,首先用一个小...
  • 使用AIDL实现进程间的通信

    万次阅读 多人点赞 2011-05-06 17:07:00
    编译器通过*.aidl文件的描述信息生成符合通信协议的Java代码,我们无需自己去写这段繁杂的代码,只需要在需要的时候调用即可,通过这种方式我们就可以完成进程间的通信工作。关于AIDL的编写规则我在这里就不多介绍了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 38,067
精华内容 15,226
关键字:

进程间的通信