zoukankan      html  css  js  c++  java
  • windows进程间通信方式_进程间通信四种主要方式

    今天总结一下windows进程间通信方式_进程间通信四种主要方式:

    以下内容参考了这几位大佬,感谢!

    悄然拔尖 进程间通信

    12oz 进程间通信 (IPC) 方法总结 (一)

    风雨无阻 进程间通信的四种方式

    1、常见的沟通方式

    管道管道:管道是半双工通信方式,数据只能单向流动,只能在相关进程之间使用。过程的遗传关系通常指的是亲子过程关系。命名管道FIFO:命名管道也是一种半双工通信模式,但是允许不相关的进程之间进行通信。

    消息队列消息队列:消息队列是存储在内核中并由消息队列标识符标识的消息的链表。消息队列克服了信号传递信息少、流水线只能承载未格式化的字节流、缓冲区大小有限等缺点。
    共享内存:共享内存是指可以被其他进程访问的一块内存。这个共享内存由一个进程创建,但可以由多个进程访问。共享内存是最快的IPC模式,是专门针对其他进程间通信模式效率低而设计的。它通常与其他通信机制(如信号量)结合使用,以实现进程之间的同步和通信。

    信号量:信号量是一个计数器,可以用来控制多个进程对共享资源的访问。当一个进程正在访问共享资源时,它通常被用作一种锁定机制,以防止其他进程访问该资源。所以主要用作进程之间以及同一进程中不同线程之间的同步方式。

    Socket Socket: Socket socket也是一种进程间通信机制。与其他通信机制不同,它可以用于进程间通信。Sinal: Sinal是一种复杂的通信方式,用来通知接收过程某个事件已经发生。

    2、按通信类型区分

    共享存储系统
    1.基于共享数据结构的通信模式
    (只适合传输相对少量的数据,通信效率低,属于低级通信)
    2.基于共享存储区域的通信模式
    管道通信系统
    管道是指用于连接读进程和写进程以实现它们之间通信的共享文件(管道文件)
    管道机制需要提供几种协调能力
    1.互斥,即当一个进程在管道上执行读/写操作时,其他进程必须等待。
    2.同步,当一个进程写入一定量的数据时,它会进入睡眠状态,一直等到读取进程将数据带走,然后再醒来。阅读过程类似
    3.确定对方是否存在
    信息传递系统
    1.直接通信模式
    发送进程使用操作系统提供的发送原语直接向目标进程发送消息
    2.间接沟通模式
    发送和接收过程都通过共享实体(邮箱)发送和接收消息
    客户服务器系统
    1.套接字通信标识数据结构是进程通信和网络通信的基本组成部分基于文件的(当通信过程都在同一个服务器中时)原则上类似于管道
    对于基于网络的(非对称)通信,发送方需要提供接收方的姓名。通信双方的进程在不同的主机环境下被分配一对套接字,一个属于发送进程,另一个属于接收进程)
    2.远程过程调用和远程方法调用
    3.详细解释
    3.1管道
    管道,通常被称为无名管道,是UNIX系统中最古老的IPC形式。
    1.特点:
    它是半双工(即数据只能单向流动),读写端固定。
    只能用于相关流程之间的通信(也可以用于父子流程或兄弟流程之间的通信)。
    可以看作是一个特殊的文件,它的读写可以使用读写等普通功能。但它不是普通文件,不属于任何其他文件系统,只存在于内存中。

    管道分为pipe(未命名管道)和fifo(已命名管道),除了创建、打开和删除的方式不同之外,它们几乎相同。它们都通过内核缓冲区传输数据。

    管道用于相关流程之间的通信,如父流程和子流程。它是通过管道()系统调用创建和打开的。当最后一个使用它的进程关闭它的引用时,管道将被自动撤销。

    FIFO被命名为pipe,在磁盘上有对应的节点,但没有数据块——。换句话说,它只有一个名字和相应的访问权限,是由mknode()系统调用或者mkfifo()函数建立的。一旦建立,任何进程都可以通过文件名打开和读写,不限于父子进程,前提是该进程可以正确访问先进先出。当进程不再使用FIFO时,在内存中释放,但磁盘节点仍然存在。

    流水线的本质是一个内核缓冲区,以先进先出的方式处理来自缓冲区的访问数据:流水线一端的进程顺序将进程数据写入缓冲区,而另一端的进程顺序读取数据。缓冲区可以看作一个循环队列,读写的位置自动增加。一个数据只能读取一次,读取后缓冲区消失。当缓冲区为空或满时,有一定的规则来控制相应的读进程或写进程是否进入等待队列。当空缓冲区有新数据要写或慢缓冲区有数据要读时,等待队列中的进程被唤醒,继续读写。如果您有互联网问题,也可以咨询我,谢谢!如果你也想一起学习人工智能写作,欢迎留言交流。

    我的其他文章:

    linux打成tar包命令_tar命令压缩文件夹_linux 打包压缩命令

    tinyproxy最新版,3分钟tinyproxy使用教程

    Import-Module : 未能加载指定的模块“Neo4j-Management.psd1”

    自然语言处理NLP以及现代计算机工业革命

    高级程序员简历,技术总监喜欢什么简历?

  • 相关阅读:
    第01组 Beta冲刺(4-5)
    第01组 Beta冲刺(3-5)
    第01组 Beta冲刺(2-5)
    第01组 Beta冲刺(1-5)
    等价类划分-一个程序输入三个整数,判断三角形是不等边,还是等腰还是等边
    Jmeter入门(8)- Jmeter关联
    Jmeter发送数据库请求(JDBC Request)报错
    Jmeter入门(7)- 连接数据库
    Jmeter入门(6)- 参数化
    Jmeter入门(5)- jmeter取样器的HTTP请求
  • 原文地址:https://www.cnblogs.com/python168/p/13871396.html
Copyright © 2011-2022 走看看