zoukankan      html  css  js  c++  java
  • 进程间通信方式小结

    进程间的通信方式,说白话 就是两个进程间的数据如何传输的?

    1.管道pipe(无名管道)

    看一条常见linux命令  ps -ef | grep java   

    其中中间的这条 “ | ” 就是管道,

    上述这条命令由两部分构成可以看作是两个进程 ps和grep,ps 得到的结果通过管道传递给 grep

    优点:简单简洁

    缺点:只能单向传输,只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。

    2.有名管道

    命令:  mkfifo  myPipe    // 我们手动创建一个名为"myPipe" 的管道

    echo "this is a pipe" > myPipe    //echo进程向其中写数据myPipe

    cat < myPipe                            // cat进程读出管道中数据

    有名管道类似于一种缓存, 它允许无亲缘关系进程间的通信。

    3.消息队列

    A进程要给B进程发送消息

    A将消息写至消息队列,B从消息队列读消息

    缺点:原理就是从A的内存拷贝到消息队列,再从消息队列拷贝到B的内存空间。拷贝消耗性能

    4.共享内存

    A进程与B进程通过共享内存的方式实现数据交互

    共享内存的原理也就是通过二者的虚拟内存指向同一块物理内存 

    虚拟内存可以参考这篇  虚拟内存与Linux层级结构

    缺点:多个进程共享内存可能会出现并发安全问题

    5.信号量

    信号量的本质就是一个计数器,用来实现进程之间的互斥与同步。

    信号量本身不是一种消息发送的方式,而是作为共享内存的并发解决办法

    可以把信号量看作是一把锁,初始值为1

    当有进程访问时,设置为0,其他进程通过判断信号量二实现串行化访问内存,也就解决并发问题了

    6.Socket

    Socket套解字也是一种进程间通信机制,代表不同机器间的进程通信方式

  • 相关阅读:
    bzoj1257
    bzoj1833
    bzoj3505
    bzoj2226
    bzoj1263
    bzoj2429
    bzoj1854
    bzoj3555
    bzoj1877
    放两个模版
  • 原文地址:https://www.cnblogs.com/ttaall/p/15772891.html
Copyright © 2011-2022 走看看