进程与线程

一.通信

1.进程间的通信:

  • 01.共享内存:指的是两个或多个进程共享一个给定的存储区。
  • 02.共享文件

03.管道(pipe)


  • 无名管道:是 UNIX 系统IPC最古老的形式。
    特点:
    001.它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端。
    002.它只能用于具有亲缘关系的进程之间的通信(也是父子进程或者兄弟进程之间)。
    003.它可以看成是一种特殊的文件,对于它的读写也可以使用普通的read、write 等函数。但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中。
  • 命名管道
    001.可在两个无关的进程中交换数据



04.消息队列


  • 001.消息队列是面向记录的,其中的消息具有特定的格式以及特定的优先级。
  • 002.消息队列独立于发送与接收进程。进程终止时,消息队列及其内容并不会被删除。
  • 003.消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取。


05.信号量:一个计数器,用于实现进程间的互斥与同步,而不是用于进程间的数据通信。

06.Socket和Stream:Socket和Stream支持不同主机上的两个进程IPC

2.线程间的通信

线程间的通信就是为了保持各个线程之间的协同工作。大概有以下几种方式:


  • 01.等待通知机制(​​wait/notify​​):这个机制的目的其实就是实现各个线程之间的合作。【比如说消费者/生产者实现;哲学家进餐问题等】
  • 02.​​join​​操作【为了让父进程在子进程消亡之后再消亡】
  • 03.类​​ThreaLocal​​的使用【让每个进程都有一个自己的变量,即各个线程之间互不干扰】