进程间通信又称IPC(Inter-Process Communication),指多个进程之间相互通信,交换信息的方法。
根据进程通信时信息量大小的不同,可以将进程通信划分为两大类型:
1、低级通信,控制信息的通信(主要用于进程之间的同步,互斥,终止和挂起等等控制信息的传递) 。
2、高级通信,大批数据信息的通信(主要用于进程间数据块数据的交换和共享,常见的高级通信有管道,消息队列,共享内存等)。
进程间的通信方式有管道,有名管道,信号量,消息队列,信号,共享内存,套接字等一些通信方式。
管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
有名管道 named pipe: 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
信号量( semophore ): 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。不是用于交换大批数据,而用于多线程之间的同步.常作为一种锁机制,防止某进程在访问资源时其它进程也访问该资源。
因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
消息队列( message queue : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
信号 ( signal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
通常在linux系统中,我们使用kill命令来杀死进程的时候,都是通过信号来实现的,如果将被杀死的程序实现了对KILL信号的处理,那么该程序将会自动调用自身的销毁代码来执行线程或者进程的销毁操作;如果没有实现KILL信号的接收,则由系统进行强制关闭该线程或进程。
共享内存( shared memory ):共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC方式,它是针对其他进程间通信方式运行效率低而专门设计的。
它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。
套接字( socket ): 套接字也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同机器间的进程通信。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/183064.html原文链接:https://javaforall.cn