1.管道(pipe)
利用管道文件可以进行进程间数据的通信,通常是具有血缘关系的父子进程间的通信方式。
管道通信为半双工模式,父子进程可以通过调用内核中的read()和write()命令来向管道文件进行读写操作。
管道通信是基于硬盘内的文件,所以I/O速度较低。
2.消息队列
消息队列是一种类似链表的数据结构,存放于内存中,因此I/O速度较管道更快,通过ipcs -q命令可以查看当前系统中被创建的消息队列。
多个不同进程可以使用同一个消息队列进行通信,消息队列中的数据是以块存放,每块数据有特定的mtype,进程在发送和接收数据的时候必须指定特定的mtype。
3.信号量
用于处理进程的同步和互斥:
同步:严格安排进程执行的先后顺序
互斥:两个进程不可以同时使用同一资源(代码段),可以说是特殊的同步
信号量可以理解为一个计数器,当有进程申请使用信号量时,将其计数-1(P操作),当计数器为0时表示此时没有资源,其他进程要访问必须等待,当一个进程使用完毕资源时,将其计数+1(V操作)。
4.共享内存
类似消息队列,但操作更为简洁,通过ipcs -m命令可以查看当前系统中被创建的共享内存区。
进程想使用共享内存区时,需要先创建对该共享内存的链接。
二、不同主机进程间的通信(网络通信)
通过两台主机的一对套接字来进行通信,套接字由ip地址和端口号组成,一个套接字标识特定主机的特定进程。
服务器进程创建套接字,将其设置监听状态,这种进程称为守护进程。
之后客户端创建用于请求链接的套接字,对服务器处于监听状态的套接字发出链接请求,从而建立链接。
原文地址:http://blog.51cto.com/papapa213/2095713