2023-01-16 stonedb-多线程聚合-pack异步释放-需求分析

博客讨论了在Stonedb中多线程聚合时遇到的pack在线程切换中被错误释放的问题。提出了通过引入异步释放策略,由独立线程负责pack清理,以解决并发控制和性能问题。文章详细分析了模块间关系、标识设计、线程同步策略以及不同类型的table和列属性。核心思想是将列属性释放操作转移到单独线程进行异步处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

摘要:

目前在聚合多线程扫表的时, 遇到在线程切换时, 当LOCK_ONE策略导致其他线程的pack被释放引发crash的问题。并且当LOCK_ONE时, 每读取一个新的pack就会释放持有的旧的pack, 这样性能也不好.

考虑将pack的释放设计为异步的策略, 由独立的线程来完成对pack的释放.

多线程聚合在扫表时由于LOCK_ONE策略将发生在线程切换时候pack地址丢失.

除去已经新增的LOCK_ALL和LOCK_LRU策略, 考虑线程pack标识来作为控制。

遇到的问题:

  1. 独立的清理线程, 是新写一个独立的线程, 还是用现有的thread_pool?
  2. 用来标识pack是否正在使用的标识的数据结构如何设计?
  3. 如果对工作线程和清理线程的临界区设置线程同步策略?
    1. 要不要使用锁?
      1. 使用锁的坏处是什么, 会造成多大的坏处
      2. 锁的使用规则是什么? 为什么要加锁?
    2. 还是使用CAS?
      1. CAS的原子变量和标识的数据结构如何配合?
  4. 工作线程设置和清理pack标识的接口
    1. LockPack
      1. 读取一个新pack时
      2. 设置读取的pack标识, 并清理保存的上一个pack的标识
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟世者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值