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 |
线程函数。从队列中拉任务并执行
这里使用最粗暴的方式检测线程是否可以退出了 但是实际上,如果当前的线程个数比任务数要多,或者差不多,而且任务执行都很快的时候, 并不需要保留这么多线程