TokuDB ·引擎机制· TokuDB线程池

本文涉及的产品
云原生多模数据库 Lindorm,多引擎 多规格 0-4节点
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 MongoDB,通用型 2核4GB
简介: 这次还是以介绍TokuDB内部机制为主, 本篇来谈谈TokuDB内部的线程池模型。 TokuDB内部有一个线程池实现kibbutz, 代码: https://github.com/Tokutek/ft-index/blob/master/util/kibbutz.cc 其调度思想基于work-s

这次还是以介绍TokuDB内部机制为主, 本篇来谈谈TokuDB内部的线程池模型。

TokuDB内部有一个线程池实现kibbutz, 代码: https://github.com/Tokutek/ft-index/blob/master/util/kibbutz.cc

其调度思想基于work-stealing, 代码也很简洁, 大体思路就是:维护一个任务队列, 空闲线程自己去这个队列领取任务。

kibbutz中文为“基布兹”,是以色列的一个集体社区,感兴趣的戳这里

TokuDB内部线程池按功能可以分为以下3大块:

节点“饱和”apply线程池

当一个节点“饱和”的时候,TokuDB需要把节点message buffer中的数据apply到子节点(这个行为是由TokuDB的特殊索引结构决定)。

这个线程池的作用是实现并发apply“饱和”节点,线程数目为物理CPU的个数。

缓存专用线程池

这个线程池专门为缓存服务,包括两大块:

a) 节点预读线程,比如做区间查找的时候,在某些条件下会触发子节点预读,提前在后台线程把节点读取到缓存。

b) LRU剔除线程,当缓存大小到达高水位的时候,后台线程把LRU尾端的脏节点刷到磁盘,并从LRU中清除。

这个池子里的线程数目较多,干的活也比较重,线程数目为物理CPU数*2。

checkpoint克隆线程池

这个线程池比较特殊。

做checkpoint的时候,如果一个节点处于“pin”状态,并且它是可克隆的,就使用后台线程把它的数据克隆出来并刷到磁盘,这样checkpoint可以继续进行下去(如果此节点不可克隆,checkpoint线程会一直等到这个pin状态结束)。

这个线程数为物理CPU数/4(如果CPU > 4)。

好的线程池设计+好的任务调度算法,应该是一个引擎高效的最基本条件,让任务尽量并行起来。

目录
相关文章
|
存储 Java 关系型数据库
|
存储 Java 关系型数据库
MySQL · TokuDB · Cachetable 的工作线程和线程池
介绍 TokuDB也有类似InnoDB的buffer pool叫做cachetable,存储数据节点(包括叶节点和中间节点)和rollback段,本文中为了表达简单,叶节点,中间节点和rollback段统称数据节点。Cachetable是全局唯一的,它与MySQL实例存在一一对应的关系。TokuD
1628 0
|
16天前
|
Java 数据库 Android开发
【专栏】Kotlin在Android开发中的多线程优化,包括线程池、协程的使用,任务分解、避免阻塞操作以及资源管理
【4月更文挑战第27天】本文探讨了Kotlin在Android开发中的多线程优化,包括线程池、协程的使用,任务分解、避免阻塞操作以及资源管理。通过案例分析展示了网络请求、图像处理和数据库操作的优化实践。同时,文章指出并发编程的挑战,如性能评估、调试及兼容性问题,并强调了多线程优化对提升应用性能的重要性。开发者应持续学习和探索新的优化策略,以适应移动应用市场的竞争需求。
|
4天前
|
Java 数据库
【Java多线程】对线程池的理解并模拟实现线程池
【Java多线程】对线程池的理解并模拟实现线程池
13 1
|
4天前
|
设计模式 消息中间件 安全
【Java多线程】关于多线程的一些案例 —— 单例模式中的饿汉模式和懒汉模式以及阻塞队列
【Java多线程】关于多线程的一些案例 —— 单例模式中的饿汉模式和懒汉模式以及阻塞队列
9 0
|
4天前
|
Java
【Java多线程】分析线程加锁导致的死锁问题以及解决方案
【Java多线程】分析线程加锁导致的死锁问题以及解决方案
12 1
|
4天前
|
存储 缓存 安全
【Java多线程】线程安全问题与解决方案
【Java多线程】线程安全问题与解决方案
12 1
|
4天前
|
Java 调度
【Java多线程】线程中几个常见的属性以及状态
【Java多线程】线程中几个常见的属性以及状态
9 0
|
4天前
|
Java 调度
【Java多线程】对进程与线程的理解
【Java多线程】对进程与线程的理解
11 1
|
5天前
|
存储 安全 Java
【探索Linux】P.21(多线程 | 线程同步 | 条件变量 | 线程安全)
【探索Linux】P.21(多线程 | 线程同步 | 条件变量 | 线程安全)
11 0