zoukankan      html  css  js  c++  java
  • 进程间通信

    进程间通讯的五种方法:管道,信号量,共享内存,消息队列            套接字 Socket

    【1】管道

      管道的创建方法:无名管道的创建方法  pipe(int fd[2])      有名管道的创建方法  int  mkfifo(char * path , mode_t mode);

    相关问题:

      1.有名管道和无名管道的区别?搞到的默认大小是多大?         无名管道是父子间使用,有名管道是任意两个进程间使用

      2.管道是全双工还是半双工?       半双工

      3.管道写入的数据存放在哪了?      内存 

    管道的实现:管道有一个默认大小的内存 ,一个读指针,一个写指针,管道可一边读一边写,但是不能读的别写得快

    【2】信号量

      信号量是一种特殊的变量,用来控制进程的同步

      p, v原子操作         p:占用资源(+1)v :释放资源(-1);

      信号量主要有二值信号量和计数信号量

      临界资源:共享的资源,用信号量拉实现进程之间的同步

      临界区:访问临界资源的代码(即pv操作去控制的代码段)

    【3】共享内存

      1.原理:申请一块物理内存空间作为共享内存,然后将其映射到两个不同进程的地址空间中,两个进程将会有一部分物理空间是重合叠的。以此达到两个进程间的交换数据的目的。

      2.接口:shmget()         shmctl()       shmat()             shmdt()

      3.应该映射到进程地址空间的那一部分呢?

    【4】消息队列

      原理:数据结构的集合

      应用场景:

      1):将消息队列应用在日志处理当中,比如Kafka的应用,解决大量日志传输的问题。

      2):秒杀活动一般会因流量过大,导致流量暴增,应用挂掉。为了解决这个问题,一般需要早应用前端加入消息队列;可以控制活动的人数;可以缓解短时间内高流量压垮应用。

      3):异步处理,用户注册后,需要发注册邮件和注册短信。传统的做法有两种,串行和并行的方式。

      4):消息通讯是指,消息队列一般都内置了高效的通信机制,因此可以用在纯粹的消息通信,应用中,比如实现点对点信息交互,或者聊天室等     

      接口:

      msgget()            msgsnd()             msgrcv()            msgctl()

  • 相关阅读:
    [自用] 数论和组合计数类数学相关(定理&证明&板子)
    OI回忆录?
    [UOJ310] 黎明前的巧克力
    [总结] 后缀自动机学习笔记
    [总结] 动态点分治学习笔记
    [HEOI2018] 秘密袭击coat
    [51nod1355] 斐波那契的最小公倍数
    [SRM601] WinterAndSnowmen
    [总结] 二项式反演学习笔记
    [Luogu4705] 玩游戏
  • 原文地址:https://www.cnblogs.com/xcb-1024day/p/11240609.html
Copyright © 2011-2022 走看看