导航引擎结构分析之二

导航系统中,数据管理模块是核心部分,涉及性能、依赖和安全性。常用通信方式包括线程内的栈和堆,线程间的消息队列和事件,进程间通过共享内存等。品质需求强调高性能通信、数据共享和减少延迟。对于高实时性需求,共享内存机制优于异步Socket通信。数据载入和传递需高效,共享内存能有效降低CPU负荷和内存占用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据管理模块的设计是导航结构设计的关键之一。

因为它涉及到产品的性能、依赖关系、可变性(某些结构是不变的,但一些业务数据是无法预测其变化的)、数据访问的安全性。它又是导航中大部分模块的交互中心。


常用的数据管理、通信方式

1. 一个线程内,不同函数模块间数据通信: 栈(局部变量),堆(内存)变量实现数据的保存和通信,无需加锁、同步、信号量机制

2. 两个线程间:信号量、消息队列、事件event。一个进程内的多线程共享数据空间,所有的静态变量都可以作为线程共享的内存空间。

3. 进程间通信:管道、有名管道、消息队列、信号量、共享内存、信号、socket套接字。需要通过操作系统内核对数据进行传递。

4. 分布式、网络通信:socket套接字、D-bus、

品质需求

导航的数据管理模块一般又称数据访问层,或者Data Access,其目的用于各模块间的数据交换。

这里对其品质需求做进一步的分析:

1. 性能对通信机制的限制。

独立模块间的通信机制可以通过socket或D-bus通信,这样模块的灵活性更高。模块之间彼此不需知道对方的存在,只须采用“订阅-通知”或“请求-反馈”的方式进行数据通信。

但上述方式不适合实时性要求高的场景,如任务切换(消息队列处理),复杂的状态处理算法都会造成延迟,异步处理的Socket通信方式对于DataAccess不太合适。

2. 数据载入

当前位置的附件的地图数据,规划的导航线路的周边地图数据,是很多模块共同使用的数据。

这些数据都是从数据库中载入,文件的读取开销大࿰

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值