@@ -8,6 +8,8 @@ sidebar_position: 8
8
8
9
9
本模块定义了通用的 ` ReadPort ` 与 ` WritePort ` 接口类,用于跨平台封装异步、阻塞、轮询等多种 I/O 行为,并通过 ` Operation ` 模型绑定完成反馈机制。适配不同底层驱动时,只需实现对应的读写函数并赋值给端口对象,即可获得完整的异步 I/O 能力。
10
10
11
+ ` ReadPort ` ` WritePort ` 和` WritePort::Stream ` 本身由原子操作与无锁数据结构实现,可以做到整个读写过程不进行任何系统调用,同时保证线程安全。下文的锁都只是逻辑抽象,不涉及到实际的互斥锁操作。
12
+
11
13
## 核心类型
12
14
13
15
### ReadPort / WritePort
@@ -144,4 +146,50 @@ uart.Read(buffer, op_cb);
144
146
145
147
---
146
148
149
+ ## WritePort::Stream 批量写入接口
150
+
151
+ ` WritePort::Stream ` 提供了类似 C++ 标准流的链式批量写入能力,适合高吞吐、大包或连续多块数据写入场景。其优势在于 ** 一次性锁定端口资源、批量提交数据、降低队列压力和碎片化** ,且用法简洁自然。
152
+
153
+ ### 主要特性
154
+
155
+ - ** 流式链式写入** :支持多次 ` << ` 操作,将多段数据批量拼接写入,提升吞吐效率。
156
+ - ** 自动批量提交** :析构时会自动提交未提交的数据,也可随时调用 ` Commit() ` 手动提交。
157
+
158
+ ### 示例用法
159
+
160
+ ``` cpp
161
+ WriteOperation op;
162
+ // 典型的流式批量写入
163
+ {
164
+ WritePort::Stream s(&uart_port, op);
165
+ s << data1 << data2 << data3;
166
+ // s.Commit(); // 可选,析构时自动提交
167
+ }
168
+ ```
169
+
170
+ ### 典型场景
171
+
172
+ - 串口/UART 批量输出
173
+ - 网络通信分片、日志批量刷写
174
+ - 多包数据一次性发送,极大减少写入等待和队列竞争
175
+
176
+ ### 接口说明
177
+
178
+ ``` cpp
179
+ class WritePort ::Stream {
180
+ public:
181
+ Stream(WritePort* port, WriteOperation op); // 锁定端口并进入批量写模式
182
+ ~ Stream(); // 析构自动提交并释放锁
183
+ Stream& operator<<(const ConstRawData& data); // 追加一段数据
184
+ ErrorCode Commit(); // 手动提交已追加的数据(可选)
185
+ };
186
+ ```
187
+
188
+ - **Stream(WritePort*, WriteOperation)**:构造时尝试锁定,锁定失败则回退为普通写入模式。
189
+ - **~Stream()**:析构自动提交所有数据、释放锁。
190
+ - **operator<<**:链式添加要写入的数据。
191
+ - **Commit()**:立即将当前追加的数据全部写入队列并(如需要)释放锁,可用于分段 flush。
192
+
193
+ ---
194
+
147
195
`ReadPort` 与 `WritePort` 是 LibXR IO 抽象层的核心接口,提供统一的数据缓冲与完成反馈机制,适用于串口、网络、文件系统等多种数据流场景。
0 commit comments