进程间通信就是在不同进程之间传播或交换信息
管道、消息队列、信号量、共享内存用于本地进程间通信
套接口用于远程进程间通信
信号是一种处理异步事件的方法,信号量是一种实现进程间同步、互斥的机制
信号由硬件或软件触发,再由操作系统内核发送给应用程序的中断形式
信号量是POSIX进程间通信的工具,在它上面定义了一系列操作源语,简单地讲它可以在进程间进行通信
管道实现了数据以一种数据流的形式在进程间流动,相当于文件系统中的一个文件,来缓存所要传输的数据,但是数据读出后,管道中就没有数据了。
匿名管道是进程中的一种资源,会随进程的结束而被系统清除。
管道的写入规则:向管道中写入数据时,管道缓冲区一旦有空闲域,写进程就会立即试图向管道写入数据。如果读进程未读取管道缓冲区的数据,那么写操作将一直阻塞。
命名管道(FIFO)与管道的区别:
1、命名管道可以用于任何两个进程间的通信,而不限制这两个进程同源,因此命名管道的使用比管道的使用灵活方便的多。
2、命名管道作为一种特殊的文件存放于文件系统中,而不是像管道那样存放于内存(使用完毕后消失)。当进程对命名管道的使用结束后,命名管道依然存在于文件系统中,除非对其进行删除操作,否则该命名管道不会消失。
FIFO遵循先进先出的规则。
消息队列是一种以链表式结构组织的一组数据,存放在内核中,是由各进程通过消息队列表示服引用的一种数据传送方式。
共享内存就是多个进程可以把一段内存映射到自己的进程空间,以此来实现数据的共享和传输。
信号量本身不具备数据交换的功能,而是通过控制其他的通信资源(如文件、外部设备等)来实现进程间通信。它是一种外部资源的标识。
信号量是多进程环境下使用的一种设施,他负责协调各个进程,以保证它们能够正确、合理地使用公共资源。
死锁是指多个进程因竞争资源而造成的一种僵局,若无外力作用,这些进程都无法向前推进,死锁是计算机系统和进程所处的一种状态。