进程间通信主要包括管道、系统IPC和套接字
1.管道
管道分为普通管道和命名管道
普通管道是半双工通信方式,只允许有亲缘关系的进行间进行通信,管道可以看成特殊的文件,但它不属于任何文件系统,只存在于内存中,可以通过read 和write对他进行读写
命名管道允许无亲缘关系的进程间通信
2.系统IPC
(1)消息队列
消息队列是消息的链接表,每一个消息队列都有一个标识符,就是队列ID,消息队列克服了信号传递信息少、管道只能传递无格式字节流、缓冲区大小受限等特点,具有读权限的进程可以从消息队列里读消息,具有写权限的进程可以向消息队列里添加新记录
消息队列的特点:消息队列是面向记录的,消息队列里面的记录是有格式和优先级的
消息队列独立于发送进程和接受进程,消息队列不会随着进程的结束而消失
可以实现消息队列里记录的随机查询,不用非得按照先进先出的顺序查询
(2)信号量
信号量是一个计数器,用于对访问同一个内存资源的多个进程进行计数,它用于进程间同步和互斥,不用于进程间传递数据,要是传递通信数据的话还需要结合共享内存。
(3)信号
信号是一种比较复杂的通信方式,用于通知接受进程事件的发生
(4)共享内存
不同进程可以看到对方进程对共享内存数据的更新,这种方式需要某种同步机制,比如互斥锁和信号量,共享内存是一种最快的进程IPC,因为进程可以直接对内存进行读取。
3.套接字
套接字允许不同主机间的进程进行通信
线程间通信:
(1)临界区
通过多线程的串行化允许线程对共享资源的访问,速度快
(2)互斥量
只有拥有互斥对象的线程才能对资源空间进行访问,因为互斥对象只有一个,所以可以保证公共资源不被多个线程访问
(3)信号量
用于控制多个线程对共享空间资源的访问,一般会限制同一时刻访问资源的最大线程数
(4)信号
通过通知操作的方式来控制线程间的同步,可以区分线程间的优先级