|
MiniOB 1
MiniOB is one mini database, helping developers to learn how database works.
|
类 | |
| struct | ThreadData |
Public 成员函数 | |
| int | init (const char *name, int core_size, int max_size, long keep_alive_time_ms) |
| 初始化线程池 更多... | |
| int | init (const char *name, int core_pool_size, int max_pool_size, long keep_alive_time_ms, unique_ptr< Queue< unique_ptr< Runnable > > > &&work_queue) |
| 初始化线程池 更多... | |
| int | execute (unique_ptr< Runnable > &&task) |
| 提交一个任务,不一定可以立即执行 更多... | |
| int | execute (const function< void()> &callable) |
| 提交一个任务,不一定可以立即执行 更多... | |
| int | shutdown () |
| 关闭线程池 | |
| int | await_termination () |
| 等待线程池处理完所有任务并退出 | |
| int | active_count () const |
| 当前活跃线程的个数,就是正在处理任务的线程个数 | |
| int | core_pool_size () const |
| 核心线程个数 | |
| int | pool_size () const |
| 线程池中线程个数 | |
| int | largest_pool_size () const |
| 曾经达到过的最大线程个数 | |
| int64_t | task_count () const |
| 处理过的任务个数 | |
| int64_t | queue_size () const |
| 任务队列中的任务个数 | |
Private 类型 | |
| enum class | State { NEW , RUNNING , TERMINATING , TERMINATED } |
| 线程池的状态 更多... | |
Private 成员函数 | |
| int | create_thread (bool core_thread) |
| 创建一个线程 更多... | |
| int | create_thread_locked (bool core_thread) |
| 创建一个线程。调用此函数前已经加锁 更多... | |
| int | extend_thread () |
| 检测是否需要扩展线程,如果需要就扩展 | |
| void | thread_func () |
| 线程函数。从队列中拉任务并执行 更多... | |
Private 属性 | |
| State | state_ = State::NEW |
| int | core_pool_size_ = 0 |
| 线程池状态 | |
| int | max_pool_size_ = 0 |
| 核心线程个数 | |
| chrono::milliseconds | keep_alive_time_ms_ |
| 最大线程个数 | |
| unique_ptr< Queue< unique_ptr< Runnable > > > | work_queue_ |
| 非核心线程空闲多久后退出 | |
| mutex | lock_ |
| 任务队列 | |
| map< thread::id, ThreadData > | threads_ |
| 保护线程池内部数据的锁 | |
| int | largest_pool_size_ = 0 |
| 线程列表 | |
| atomic< int64_t > | task_count_ = 0 |
| 历史上达到的最大的线程个数 | |
| atomic< int > | active_count_ = 0 |
| 处理过的任务个数 | |
| string | pool_name_ |
| 活跃线程个数 | |
|
strongprivate |
|
private |
创建一个线程
| core_thread | 是否是核心线程 |
|
private |
创建一个线程。调用此函数前已经加锁
| core_thread | 是否是核心线程 |
| int common::ThreadPoolExecutor::execute | ( | const function< void()> & | callable | ) |
提交一个任务,不一定可以立即执行
| callable | 任务 |
| int common::ThreadPoolExecutor::execute | ( | unique_ptr< Runnable > && | task | ) |
提交一个任务,不一定可以立即执行
| task | 任务 |
| int common::ThreadPoolExecutor::init | ( | const char * | name, |
| int | core_pool_size, | ||
| int | max_pool_size, | ||
| long | keep_alive_time_ms, | ||
| unique_ptr< Queue< unique_ptr< Runnable > > > && | work_queue | ||
| ) |
初始化线程池
| name | 线程池名称 |
| core_size | 核心线程个数。核心线程不会退出 |
| max_size | 线程池最大线程个数 |
| keep_alive_time_ms | 非核心线程空闲多久后退出 |
| work_queue | 任务队列 |
| int common::ThreadPoolExecutor::init | ( | const char * | name, |
| int | core_size, | ||
| int | max_size, | ||
| long | keep_alive_time_ms | ||
| ) |
初始化线程池
| name | 线程池名称 |
| core_size | 核心线程个数。核心线程不会退出 |
| max_size | 线程池最大线程个数 |
| keep_alive_time_ms | 非核心线程空闲多久后退出 |
|
private |
线程函数。从队列中拉任务并执行
这里使用最粗暴的方式检测线程是否可以退出了 但是实际上,如果当前的线程个数比任务数要多,或者差不多,而且任务执行都很快的时候, 并不需要保留这么多线程