进程间的通信方式

进程间互相交换信息的工作称作进程通信。有以下6种常见的进程通信方式:

管道/匿名管道(Pies)

管道具有以下限制:

  • 只支持半双工通信
  • 只能在父子进程中使用
    管道
    图中fd[0]用于读,fd[1]用于写。

有名管道(Names Pipes)

  • 有名管道采用先进先出FIFO(First in First out)通信机制,去除了管道只能在父子进程中使用的限制。
  • 有名管道常用于客户-服务器应用程序中,用作汇聚点,在客户进程和服务器进程之间传递数据。
    有名管道

消息队列(Message Queuing)

  • 消息队列是消息的链表,存放在内存中并由消息队列标识符标识;
  • 管道和消息队列的通信都是FIFO原则,与管道(匿名管道:只存在于内存中的文件;有名管道:存在于实际磁盘介质或者文件系统)不同的是消息队列存放在内核中,只有在内核重启(操作系统重启)或者显示地删除一个消息队列时,该消息队列才会被真正地删除;
  • 消息队列可以实现消息的随机查询,消息不一定要以FIFO的次序读取,也可以按消息的类型读取;
  • 消息队列克服了信号承载量少、管道只能承载无格式字节以及缓冲区大小受限制等缺陷。

信号量(Semaphores)

信号量是一个计数器,用于多进程对共享数据的访问,其意图在于进程间同步。这种通信方式主要用于解决与同步相关的问题并避免竞争。

共享内存(Shared Memory)

是的多个进程可以访问同一块内存空间,不同进程可以及时看到其它进程对共享内存中数据的更新。这种方式依靠某种同步操作,如互斥锁和信号量等。

套接字(Sockets)

主要用于客户端和服务器之间通过网络进行通信。套接字是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值