• 各类进程间通信的区别 线程与进程之间的区别


    无名管道:

    1、只能从进程A传到另一个进程B,消息流通具有单向性(半双工通信)

    2、未满不读(进程A在传信息没把管道的空间占满之前,进程B都不能读进程A传递过来的信息)

    3、已满不写(进程A传递信息将管道空间占满后,进程A将不再对管道进行写操作)

    4、未空不写(进程B在读取管道消息时为将管道信息读完并删除完之前,进程A不能进行进一步的读操作)

    5、已空 不读(进程B将管道的信息读完后,将不再对管道进行进一步的读操作)

    6、读后删除(进程B从管道读完后,将管道读到的信息删除)

    7、只能进行有亲缘关系的进程之间的通信

    有名管道:

    1、可以对没有亲缘关系的进程之间进行通信

    管道使用情景:

    1、半双工。数据只能在一个方向上流动。

    2、单独构成一个独立的文件系统。管道对于管道两端的进程而言就是一个文件,但它不是变通的文件,而是单独构成一种文件系统,并且只存在于内存中。

    3、缓冲区是有限制的(管道存在于内存中,在管道创建时,为缓冲区分配一个页面大小)

    4、管道传送的数据不限定格式。可以传递Json、数字、xml等格式数据。

    消息队列:

    客服了信号传递信息少、克服管道承载无格式字节流以及缓冲区大小受限制的问题

    共享内存:

    共享内存是最快的一种进程间通信的方式也是效率最高的一种进程间通信的方式,通常搭配其它进程间通信进行使用(例如信号)

    信号量:

    1、用于临界区的互斥访问

    2、条件同步:线程之间的事件等待

    线程与进程之间的区别:

    将进程比作火车,线程比作车厢

    1、进程是cpu调度的最小单位,线程是资源分配的最小单位

    2、线程是在进程下运行的,单纯的车厢是无法运行的

    3、一个进程包含多个线程,一个火车包含多个车厢

    4、进程之间的数据很难共享,比如火车A的人想去火车B去乘坐

    5、同一个进程下的多个线程数据很容共享,例如火车A的车厢1的乘客换到车厢2是很容易的

    6、进程要比线程消耗更多的计算机资源,采用多列火车比一列火车使用多个车厢资源开销要大

    7、进程之间不会相互影响,火车A着火了不会影响到火车B

    8、同一个进程下的一个线程出问题,那么整个进程将出问题,例如火车A的一间车厢着火将把整个火车给弄着火

  • 相关阅读:
    Oracle存储架构
    1476_OSP以及HASL等几种PCB表面处理工艺了解
    基于上一篇博客,用阻塞队列实现异步下单
    Servlet | HTTP协议、模板方法设计模式
    Day741.Redis消息队列 -Redis 核心技术与实战
    选择题练习
    这就是思维导图!全面分析思维导图的实际用途
    Spring RestTemplate配置DNS解析超时
    被领导夸奖的终极目标计划表,让你人生开挂
    原生js--封装点击上传附件
  • 原文地址:https://blog.csdn.net/qqQQqsadfj/article/details/127854768