THE NETWORKINGTS FROM SCRATCH: IO Objects
900.82 KB
35 页
0 评论
语言 | 格式 | 评分 |
---|---|---|
英语 | .pdf | 3 |
摘要 | ||
文档主要介绍了C++ Networking TS中I/O对象的概念和实现细节,包括异步操作、完成处理程序的存储、Service对象的作用以及ExecutionContext的生命周期管理。I/O对象提供了对底层异步功能的处理,并解决了所有权循环的问题。文档还讨论了如何通过Service对象管理完成处理程序,以避免潜在的循环引用,并确保异步操作的正确组合和执行。 | ||
AI总结 | ||
以下是对文档内容的中文总结,重点突出核心观点和关键信息,逻辑连贯且简洁明了:
---
### 文档总结:《THE NETWORKINGTS FROM SCRATCH: IO Objects》
#### 1. **Networking TS 简介**
- **目标与背景**:
- Networking TS 的目标是 C++23(P0592)。
- 当前使用了独立的 Asio(1.18.0)来准备内容,并结合 P0443 友好的扩展。
- **关键点**:
- 异步操作必须确保 Networking TS 的保证。
- Completion handlers 必须存储在服务中以避免所有权循环。
- 需要跟踪未完成的工作以确保 ExecutionContext 在完成时仍可用。
#### 2. **I/O Objects**
- **定义与作用**:
- I/O Objects 提供了对底层异步功能的句柄,符合 Networking TS 框架。
- **实例**:
- `std::net::ip::tcp::socket`
- `std::net::steady_timer`
- **可能扩展**:
- 基于 EFVI 的多播套接字。
- 数据库访问层。
- 打印机应用。
- **潜在问题**:
- I/O 对象可能拥有待处理异步操作,导致类型擦除或所有权循环。
#### 3. **Completion Handler 存储与服务**
- **Completion Handler 存储选项**:
- 待处理操作可能拥有目标(如 std::function)。
- I/O 对象可能包含待处理操作的容器。
- 类型擦除可能导致目标类型不确定,存在潜在的所有权循环。
- **解决方案**:
- 使用服务对象(Service)存储 Completion handlers,打破潜在的所有权循环。
- 服务对象由 ExecutionContext 拥有,当 ExecutionContext 生命周期结束时,所有服务和 Completion handlers 会被销毁。
#### 4. **异步操作的组合与保证**
- 异步操作的组合需要确保其保证被遵守。
- 组成的异步操作的保证依赖于每个操作的保证被传递遵守。
---
### 核心观点
本文档围绕 Networking TS 的 I/O Objects 和异步操作的管理展开,重点讨论了如何避免所有权循环、存储 Completion handlers 以及异步操作的组成与保证。通过服务对象的引入,解决了潜在的生命周期管理问题,为 Networking TS 的使用提供了重要的指导。 |
P1
P2
P3
P4
P5
P6
P7
P8
P9
P10
P11
P12
下载文档到本地,方便使用
- 可预览页数已用完,剩余
23 页请下载阅读 -
文档评分