数据管理模块的设计是导航结构设计的关键之一。
因为它涉及到产品的性能、依赖关系、可变性(某些结构是不变的,但一些业务数据是无法预测其变化的)、数据访问的安全性。它又是导航中大部分模块的交互中心。
常用的数据管理、通信方式
1. 一个线程内,不同函数模块间数据通信: 栈(局部变量),堆(内存)变量实现数据的保存和通信,无需加锁、同步、信号量机制
2. 两个线程间:信号量、消息队列、事件event。一个进程内的多线程共享数据空间,所有的静态变量都可以作为线程共享的内存空间。
3. 进程间通信:管道、有名管道、消息队列、信号量、共享内存、信号、socket套接字。需要通过操作系统内核对数据进行传递。
4. 分布式、网络通信:socket套接字、D-bus、
品质需求
导航的数据管理模块一般又称数据访问层,或者Data Access,其目的用于各模块间的数据交换。
这里对其品质需求做进一步的分析:
1. 性能对通信机制的限制。
独立模块间的通信机制可以通过socket或D-bus通信,这样模块的灵活性更高。模块之间彼此不需知道对方的存在,只须采用“订阅-通知”或“请求-反馈”的方式进行数据通信。
但上述方式不适合实时性要求高的场景,如任务切换(消息队列处理),复杂的状态处理算法都会造成延迟,异步处理的Socket通信方式对于DataAccess不太合适。
2. 数据载入
当前位置的附件的地图数据,规划的导航线路的周边地图数据,是很多模块共同使用的数据。
这些数据都是从数据库中载入,文件的读取开销大