进程间通讯和线程间通讯

一、进程和线程是什么linux

     简单的描述:进程比如是工厂,线程是工厂里的生产线,一个进程里面能够包含多个线程。数据结构

     专业术语:进程是cpu资源分配的最小单位,线程是cpu调度的最小单位。并发

     每一个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程能够看作轻量级的进程,同一socket

类线程共享代码和数据空间,每一个线程都有本身独立的运行栈和程序计数器(PC),线程之间切换的开销小。测试

 

二、进程间通讯spa

    进程间通讯,基于操做系统的支持。不一样操做系统中的进程通讯,会有区别。以linux操做系统为例:操作系统

(1) 管道(pipe):管道是一种半双工的通讯方式,数据只能单向流动,并且只能在具备血缘关系的进程间使用。进程的血缘关系一般指父子进程关系。又称为无名管道。线程

   注:无名管道,只适用于关联进程之间通讯,parent 进程 和 child进程设计

 

(2)有名管道(FIFO):有名管道也是半双工的通讯方式,可是它容许无亲缘关系进程间通讯。blog

 

(3)信号(signal):信号是一种比较复杂的通讯方式,用于通知接收进程某一事件已经发生。

(4)IPC -> 消息队列(message queue):消息队列是由消息组成的链表,存放在内核中 并由消息队列标识符标识。消息队列克服了信号传递信息少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。消息队列容量为1时,有些地方称为消息邮箱。

(5)IPC -> 信号量(semophore):信号量是一个计数器,能够用来控制多个进程对共享资源的访问。它一般做为一种锁机制,防止某进程正在访问共享资源时,其余进程也访问该资源。所以,主要做为进程间以及同一进程内不一样线程之间的同步手段。

(6)IPC -> 共享内存(shared memory):共享内存就是映射一段能被其余进程所访问的内存,这段共享内存由一个进程建立,但多个进程均可以访问,共享内存是最快的IPC方式,它是针对其余进程间的通讯方式运行效率低而专门设计的。它每每与其余通讯机制,如信号量配合使用,来实现进程间的同步和通讯。

(7)套接字(socket):主要指,TCP/IP这块。套接口也是一种进程间的通讯机制,与其余通讯机制不一样的是它能够用于不一样及其间的进程通讯。

(8)事件标志组:在一些实时操做系统中经常使用,当全部标识都知足后,继续执行。

三、线程间的通讯机制。

(1)、锁机制

     1.1 互斥锁:提供了以排它方式阻止数据结构被并发修改的方法。

     1.2 读写锁:容许多个线程同时读共享数据,而对写操做互斥。

     1.3 条件变量:能够以原子的方式阻塞进程,直到某个特定条件为真为止。对条件测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一块儿使用。

(2)、信号量机制:包括无名线程信号量与有名线程信号量

(3)、信号机制:相似于进程间的信号处理。

线程间通讯的主要目的是用于线程同步,因此线程没有象进程通讯中用于数据交换的通讯机制。