前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >漫谈QNX(3)--进程间通信IPC

漫谈QNX(3)--进程间通信IPC

作者头像
Defry
发布2022-04-19 17:07:03
1.2K0
发布2022-04-19 17:07:03
举报
文章被收录于专栏:Vehicle攻城狮

在开始阅读之前,如果你对已介绍的内容还不了解的话,可以先阅读以下文章快速熟悉一下~,

既然有了进程process,那么不同进程间通信就很有必要了。两个进程之间要交换数据,控制,以及事件通知。

Message passing ---比较传统的IPC方式是基于主从式构架(client-server),并且是双向通信。

再仔细来看的话,就是每一个process里面都有一个thread来负责通信。当一个线程在等待回信的时候,就会傻傻的等待,什么都不做了。直到收到回复信息。

傻等

Servers收到信息在通道上,Clients通过connection连接上channel,来发送信息。

一个进程可以有多个connections连接到另一个进程的channel上,是个多对一的关系。

多connections和多channels

Server创建Channel:

chid = ChannelCreate (flags);

Client连接上Server的channel:

coid = ConnectAttach(nd, pid, chid, _NTO_SIDE_CHANNEL, flags);

信息的发送:

status = MsgSend (coid, smsg, sbytes, rmsg, rbytes);

信息的接收:

rcvid = MsgReceive (chid, rmsg, rbytes, info);

接下来来点干货,看一个demo代码:

Massage之间的通信数据总是通过拷贝,而不是指针的传递。

那么如何设计消息传递策略呢?一个例子看一下:

Pulses脉冲

脉冲的通信方式很特别,就像喊命令,不需要回应,执行就好了。便宜还快速,也不会发生blocking的现象。

Pulse命令

一个例子:

Event Delivery

Event是一种notification。可是从thread到thread,也可以从kernel到thread。比如硬件打断kernel的通知,或者timer到期的通知。

Shared Memory

如果通过设置shared memory, 同样的物理内存可以被多个进程访问。

After setting up a shared memory region, the samephysical memory is accessible to multipleprocesses:

preocess进程间通过shared memory通信同步策略:

IPC for synchronization

IPC for synchronization

Client先准备好共享内存的内容,然后告诉Server一切准备好了。接着Server读取共享内存内容,并做处理。最后Server回复Client说搞定了。这样Client就可以继续准备下一个任务了。

IPC想想也是很重要的,如果你设计的系统功能需要几个process的相互协作,你就绕不开IPC这个概念,下次准备有机会在一个实际的例子里看看IPC到底有什么用,怎么用。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Vehicle攻城狮 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档