进程间的通信主要分为管道,系统IPC,套接字三种
1.管道:管道主要包括普通管道和有名管道,普通管道可以用于具有亲缘关系的父子进程间的通信,半双工通信。 有名管道既可以用于有亲缘关系的父子进程的通信,还可以用于没有亲缘关系的进程。
2.系统IPC
2.1信号:信号是一种比较复杂的通信方式,用于通知注册该消息的进程某个事件已经发生。
2.2信号量:信号量是一个计数器,通常用来控制多个进程对一块共享资源的访问。
他通常作为一种锁机制,用来防止某进程正在访问共享内存的时,其他进程也访问该资源。
因此通常作为进程间或同一进程下不同线程之间的同步手段。
2.3消息队列:消息队列是由消息组成的链表,存放在内核中,并由消息队列标识符标识。
消息队列克服了信号传递消息少,只能承载无格式字节流以及缓冲区大小受限等缺点。
2.4共享内存:就是映射一段能被其他进程访问的内存,共享内存是最快的IPC方式,它是
针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制(信号量)配合
使用,来实现进程间的同步和通信。
3.套接字Socket:也是一种进程间的通信机制,和其他通信机制不同的是,他可以用于不同主机 之间的通信
这几种方式的比较
管道:速度慢,容量有限
消息队列:容量受到系统限制,且第一次读的时候要考虑上一次没有读完的数据的问题。
信号量:不能传递复杂信息,只能用来同步。
共享内存:能够很容易控制容量,速度快,但是要保证同步。