dxMap & dxQueue: 高性能线程间数据共享
简介
在 DejaOS 的多线程模型中,dxEventBus 和 dxMap/dxQueue 扮演着不同但互补的角色。理解它们的本质区别至关重要:
dxEventBus解决的是线程间的通信与通知问题。它的核心是**“事件”**,用于告诉其他线程“某件事刚刚发生了”。数据只是事件的附带信息。dxMap和dxQueue解决的是线程间的数据共享问题。它们的核心是**“数据”**本身,提供了一个所有线程都可以访问的共享内存容器。其他线程可以随时存取最新的数据状态,而无需关心数据是何时、由谁写入的。
虽然 dxEventBus 的底层 postMessage 机制因数据克隆会带来一些性能开销,但这并非选择 dxMap/dxQueue 的唯一原因。真正的选择依据在于你的意图:你是想“发送一个通知”,还是想“共享一份数据”?
DejaOS 提供了 dxMap 和 dxQueue 这两个基于原生 C/C++ 实现的高性能、线程安全的数据共享模块,它们允许所有线程访问同一块内存,实现了**零拷贝(Zero-Copy)**的数据交换。
dxMap: 一个线程安全的键值存储(Key-Value Store),用于在多个线程间共享状态。dxQueue: 一个线程安全的先进先出队列(FIFO Queue),用于在多个线程间实现生产者-消费者模式的数据流。