首先,最简单的是管道通信,管道通信又分为匿名管道和命名管道,管道通信的数据是无格式的流并且大小受限,而且方向是单向的,如果要双向通信,就要创建两个管道,此外匿名管道只能用于父子关系的进程间通信。而命名管道的话则不需要父子关系。第二种的话是消息队列,它的话,就不是无格式的字节流了,它的消息体是可以由用户自定义的数据结构,而且发送方和接收方要保持一致,这样才能保证读取的数据是正确的,但是这种方式的速度不是很及时,因为每次数据的写入和读取都需要经过用户态和内核态之间的拷贝问题。第三种是共享内存,就是直接分配一个共享空间,每个进程都可以直接访问,这样的话就很快了,但是多个进程竞争同一个共享资源会造成数据的错乱,所以,一般要与信号量一同使用。 第四种是信号,主要是来源就像我们使用的Ctrll + C和Kill命令等。刚才说的通信方式都是工作在同一台主机的,如果要在不同主机的进程间通信,那么就需要Socket通信了,像我们熟悉的TCP、UDP通信就是使用Socket进行通信。
