请你说说进程间的通信方式

得分点: 管道、信号、消息队列、共享内存、内存映射、信号量、Socket
标准答案:
进程间通信主要包括:管道、命名管道、信号、消息队列、共享内存、内存映射、信号量、Socket:
1、管道 管道也叫无名管道,他是unix系统ipc(进程间通信)的最古老形式,所有的unix系统都支持这种通信机制斜体样式。管道本质其实是内核中为何的一块内存缓冲区,Linux系统中通过pipe()函数创建管道,会生成两个文件描述符,分别对应管道的读端和写端。无名管道只能用于具有亲缘关系的进程间通信。
2、命名管道 匿名管道由于没有名字,只能用于亲缘关系的进程间通信。为了克服这个缺点,提出了有名管道(FIFO),也叫命名管道、FIFO文件。有名管道不同于匿名管道之处在于它提供了一个路径名与之关联,以FIFO的文件形式存在于文件系统中,并且其打开方式与打开一个普通文件是一样的,这样即使与FIFO的创建进程不存在亲缘关系的进程,只要可以访问该路径,仅能够彼此通过FIFO相互通信,因此,通过FIFO不相关的进程也能交换数据。
3、信号 信号是Linux进程间通信的最古老的方式之一,是时间发生时对进程的通知机制,有时也称为软件中断,他是在软件层次上对中断机制的一种模拟,是一种异步通信的方式。信号可以导致一个正在运行的进程被另一个正在运行的异步进程中断,转而处理某一个突发事件。
4.消息队列 消息队列就是一个消息的链表,可以吧消息看做一个记录,具有特定的格式以及特定的优先级,对消息队列有写权限的进程可以像消息队列中按照一定的规则添加新消息,对消息队列有读权限的进程则可以从消息队列中读出消息,消息队列是随内核持续的。
5.共享内存 共享内存允许两个或者多个进程共享物理内存的同一块区域(通常被称为段)。由于一个共享内存段会成为一个进程用户空间的一部分,因此这种ipc机制无需内核介入。所有需要做的就是让一个进程将数据复制进共享内存中,并且这部分数据会对其他所有共享同一个段的进程可用。与管道等要求发送进程将数据从用户空间的缓冲区复制进内核内存和接受进程将数据从内核内存复制进用户空间的缓冲区的做法相比,这种ipc技术的速度更快。
6.内存映射 内存映射(Memory-mapped I/O) 是将磁盘文件的数据映射到内存,用户通过修改内存就能修改磁盘文件
7.信号量 信号量主要用来解决进程和线程间并发执行时的同步问题,进程同步时并发进程为了完成共同任务采用某个条件来协调他们的活动。对信号量的操作分为P操作和V操作,P操作是将信号量的值减1,V操作是将信号量的值加1.当信号量的值小于等于0之后,再进行P操作时,当前进程或者线程会被阻塞,直到另一个进程或线程执行了V操作将信号量的值增加到大于0之时。
8.Socket套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的断点抽象。一个套接字就是网络上进程通信的一段,提供了应用层进程利用网络协议交换数据的机制。Socket一般用于网络中不同主机上的进程之间的通信。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值