hazard pointer synchronous reclamation
856.38 KB
31 页
0 评论
语言 | 格式 | 评分 |
---|---|---|
英语 | .pptx | 3 |
摘要 | ||
文档讨论了Hazard Pointer同步释放机制的设计与实现,重点介绍了Folly开源库中的实现细节。文档描述了危险指针(hazard pointer)的工作原理、异步释放和同步释放的不同机制,并提出了C++26中的最小功能子集建议。Folly库中采用了分片的领域列表以提高性能和可扩展性,同时避免了全局清理的过度使用。文档还探讨了如何在C++标准中更好地支持危险指针的同步释放机制。 | ||
AI总结 | ||
以下是对文档内容的中文总结,语言简洁明了,重点突出核心观点和关键信息:
---
**《Hazard Pointer Synchronous Reclamation》摘要**
### 1. **异步回收机制**
- **触发条件**:当退休对象数量达到阈值时触发:
- Folly库中,阈值为`max(1000, 2 × 危险指针数量)`。
- 否则,每隔2秒触发一次。
- **步骤**:
1. 从全局域结构中提取退休对象。
2. 读取危险指针值。
3. 匹配退休对象地址与危险指针值。
4. 将匹配失败的对象推回域列表,回收匹配成功的对象。
- **优点**:将未回收对象数量限制在约危险指针数量左右,但无法保证单个对象的回收时间。
---
### 2. **同步回收机制**
- **背景**:部分用户需要某些对象尽快回收,但不必同步完成。
- **解决方案**:提供按需异步回收,支持域级、队列级或对象级回收。
- **实现**:
- **队列级(cohorts)**:通过`hazard_pointer_cohort`类管理退休对象,销毁时提取并回收匹配对象。
- **全局清理**:通过检查所有危险指针值,确保所有未保护对象的回收,适合需要强语义的场景。
- **性能**:简单且语义强大,但需同时清理私有缓存,可能影响性能。
---
### 3. **Folly库实现细节**
- **优化**:2020年起使用分片队列(cohorts),避免了列表无序增长的问题,提升了性能和可扩展性。
- **收集性能**:
- 移除私有缓存,改用分片域列表。
- 快速但不可扩展的实现方法可能带来性能折衷。
---
### 4. **C++中的应用**
- **Concurrency TS2**(wg21.link/n4895):
- 提供`hazard_pointer_clean_up`等接口,支持用户自定义回收逻辑。
- collecting hazard pointers的语义为收集所有退休对象并完成回收。
- **Folly库实现**:
- `hazard_pointer`类提供多种保护方法,支持任意保护时长。
- 示例:`read_and_use`函数通过`hazard_pointer`保护指针,确保安全访问。
---
### 5. **同步回收的应用场景**
- **为什么使用危险指针**?快速(低纳秒级别)、可扩展且支持任意保护时长。
- **机制**:
- 保护指针在删除前通过危险指针锁定,确保安全访问。
- 释放后,若危险指针未变,则安全删除。
---
### 6. **未来规划**
- **C++26提案**:
-Minimal有用子集提案:基于Folly经验,高信心但需较少委员会时间。
- 可能增加分片清理、基于链接计数的超级同步异步回收等功能。
- 全球清理机制可能会被弃用。
---
通过以上总结,可以清晰了解Hazard Pointer技术的核心机制、实现细节及未来发展方向。 |
P1
P2
P3
P4
P5
P6
P7
P8
P9
P10
P11
P12
下载文档到本地,方便使用
- 可预览页数已用完,剩余
19 页请下载阅读 -
文档评分