摘要:
目前在聚合多线程扫表的时, 遇到在线程切换时, 当LOCK_ONE策略导致其他线程的pack被释放引发crash的问题。并且当LOCK_ONE时, 每读取一个新的pack就会释放持有的旧的pack, 这样性能也不好.
考虑将pack的释放设计为异步的策略, 由独立的线程来完成对pack的释放.
多线程聚合在扫表时由于LOCK_ONE策略将发生在线程切换时候pack地址丢失.
除去已经新增的LOCK_ALL和LOCK_LRU策略, 考虑线程pack标识来作为控制。
遇到的问题:
- 独立的清理线程, 是新写一个独立的线程, 还是用现有的thread_pool?
- 用来标识pack是否正在使用的标识的数据结构如何设计?
- 如果对工作线程和清理线程的临界区设置线程同步策略?
- 要不要使用锁?
- 使用锁的坏处是什么, 会造成多大的坏处
- 锁的使用规则是什么? 为什么要加锁?
- 还是使用CAS?
- CAS的原子变量和标识的数据结构如何配合?
- 要不要使用锁?
- 工作线程设置和清理pack标识的接口
- LockPack
- 读取一个新pack时
- 设置读取的pack标识, 并清理保存的上一个pack的标识
- LockPack