当前位置: 首页 > news >正文

2023-01-16 mysql列存储引擎-多线程聚合-pack异步释放-需求分析

摘要:

目前在聚合多线程扫表的时, 遇到在线程切换时, 当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的标识
      3. pack的标识为临界区, 与清理线程存在线程间同步
      4. 当能从缓存的pack池内查到, 并且标识位被清除导致pack被清理时, 重置该pack的标志位, 不清理该pack,继续使用缓存到的pack
    2. UnlockAll
      1. 释放时也仅仅是对pack标识的处理
      2. 不阻塞工作线程
  5. 清理线程的休眠和唤醒规则
    1. 是否要用条件

相关文章:

  • 辅助网站怎么做/新网站 seo
  • wordpress 底部备案号/seo积分优化
  • 有什么做衣服的网站吗/怎么做seo关键词优化
  • 专用主机方式建设网站/如何做品牌营销
  • 建设厅官方网站河南/2023年7月疫情爆发
  • axsure建设网站/世界足球排名前100
  • 如何使用ElementUI的table组件来实现单元格的行合并
  • 华为机试题:HJ10 字符个数统计(python)
  • 磨金石教育分享||CG特效技术主要应用在哪几个领域
  • ESP32 FreeRTOS-流缓冲区(12)
  • 十五天学会Autodesk Inventor,看完这一系列就够了(二),软件界面
  • 深度学习基础理念(一)
  • core-js常见于qiankun中的多份polyfill冲突问题
  • JavaWeb基础(二) HTTP、Tomcat、Servlet介绍
  • 《Linux Shell脚本攻略》学习笔记-第五章
  • VMware17虚拟机安装Ubuntu最新版本(Ubuntu22.04LTS)详细步骤
  • [极客大挑战 2019]Upload
  • 指针习题(1):升序排序