C++线程池(1)理论基础及简单实现

文章介绍了线程池的概念,作为资源管理的一种手段,它能提高系统性能,避免频繁创建和销毁线程带来的开销。线程池的创建包括预先创建线程、任务队列调度、线程执行和回收,以及如何优雅地终止线程池。文中还提供了一个简单的线程池实现示例。

写过CURD的程序员肯定都熟悉“数据库连接池”这个东西,数据库连接是个昂贵的东西,因为它的创建过程比较耗费资源。所以为了节约资源、提高数据库操作的性能,“数据库连接池”就应运而生了。

其实线程池跟数据库连接池类似,一个线程的创建和销毁也需要耗费资源,如果反复地创建和删除线程,那么资源的浪费也是很可观的。所以,预先创建一些线程,在有任务的时候分配给相应的线程去执行,对提高系统的性能有非常积极的作用。

一、线程池的创建过程

1、创建线程

for (size_t i = 0; i < threadCount; ++i) {
    threads.emplace_back(threadFunc, this);
}

threads是个vector,我们可以先创建一些线程,并把这些线程放到一个vector中。

2、任务队列与调度

void ThreadPool::addTask(const Task& task) {
    {
        lock_guard<mutex> lock(queueMutex);
        taskQueue.emplace(task);
    }
    condition.notify_one();
}

新进来的任务会被加到taskQueue队列中,你可以根据一定的策略从taskQueue中取出任务,交给某个空闲的线程去执行。

3、线程执行及回收

void ThreadPool::threadFunc() {
    while (true) {
        Task task;
        {
            unique_lock<mutex> lock(queueMutex);
            //wait()用来等一个东西
            //1. 如果第2个参数为fals
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值