|
@@ -1,8 +1,9 @@
|
|
|
#include "ThreadPool.h"
|
|
|
|
|
|
-#include "spdlog/spdlog.h"
|
|
|
+#include "FmtLog/fmtlog.h"
|
|
|
#include "fmt/std.h"
|
|
|
|
|
|
+
|
|
|
/**
|
|
|
* @brief Construct a new Thread Pool:: Thread Pool object
|
|
|
* 构造函数,从这里创建线程,和Linux C的线程池不同,Linux C的线程池数组管理的是线程ID,
|
|
@@ -20,7 +21,7 @@ ThreadPool::ThreadPool() :
|
|
|
m_threadMiniNum = 3;
|
|
|
m_threadAddNum = 2;
|
|
|
m_threadMiniIdle = 2;
|
|
|
- m_threadMaxIdle = 6;
|
|
|
+ m_threadMaxIdle = 4;
|
|
|
m_threadRunNum = 0;
|
|
|
m_threadLiveNum = 0;
|
|
|
m_threadExitNum = 0;
|
|
@@ -28,7 +29,7 @@ ThreadPool::ThreadPool() :
|
|
|
/* 创建管理线程,this表示是这个类的成员函数 */
|
|
|
m_managerThread = std::thread(&ThreadPool::managerThread, this);
|
|
|
|
|
|
- SPDLOG_DEBUG("***** Hello ThreadPool *****");
|
|
|
+ FMTLOG_DEBUG("***** Hello ThreadPool *****");
|
|
|
|
|
|
// /* 创建初始的numThread个线程 */
|
|
|
// createThread(numThread);
|
|
@@ -36,14 +37,14 @@ ThreadPool::ThreadPool() :
|
|
|
/* 析构函数 */
|
|
|
ThreadPool::~ThreadPool()
|
|
|
{
|
|
|
- SPDLOG_INFO("线程池正在退出...");
|
|
|
+ FMTLOG_INFO("线程池正在退出...");
|
|
|
/* 将stop置为true */
|
|
|
{
|
|
|
std::unique_lock<std::mutex> lock(m_mutexTask);
|
|
|
m_stop = true;
|
|
|
}
|
|
|
|
|
|
- SPDLOG_INFO("通知所有工作线程退出...");
|
|
|
+ FMTLOG_INFO("通知所有工作线程退出...");
|
|
|
/* 发送条件变量,通知所有线程 */
|
|
|
m_cond_Task.notify_all();
|
|
|
/* 等待所有的线程退出并回收完成 */
|
|
@@ -54,10 +55,10 @@ ThreadPool::~ThreadPool()
|
|
|
std::this_thread::sleep_for(std::chrono::milliseconds(100));
|
|
|
}
|
|
|
|
|
|
- SPDLOG_INFO("回收管理线程...");
|
|
|
+ FMTLOG_INFO("回收管理线程...");
|
|
|
/* 先回收管理线程 */
|
|
|
m_managerThread.join();
|
|
|
- SPDLOG_INFO("===== 线程池退出完成 =====");
|
|
|
+ FMTLOG_INFO("===== 线程池退出完成 =====");
|
|
|
}
|
|
|
|
|
|
|
|
@@ -108,7 +109,7 @@ void ThreadPool::worker()
|
|
|
/* 使用流将线程ID转换成字符串,不然fmt无法打印 */
|
|
|
std::stringstream ss;
|
|
|
ss << std::this_thread::get_id();
|
|
|
- SPDLOG_DEBUG("线程ID:{}退出任务循环", ss.str());
|
|
|
+ FMTLOG_DEBUG("线程ID:{}退出任务循环", ss.str());
|
|
|
|
|
|
return;
|
|
|
}
|
|
@@ -125,7 +126,7 @@ void ThreadPool::managerThread()
|
|
|
/* 获取空闲线程的个数 */
|
|
|
int num_idle = m_threadLiveNum.load() - m_threadRunNum.load();
|
|
|
/* 判断线程是否够用,是否需要创建新的线程 */
|
|
|
- // SPDLOG_DEBUG("***** 判断是否需要添加线程 *****");
|
|
|
+ // FMTLOG_DEBUG("***** 判断是否需要添加线程 *****");
|
|
|
if ((num_idle < m_threadMiniIdle.load()) && (m_threadLiveNum.load() < m_threadMaxNum) )
|
|
|
{
|
|
|
std::unique_lock<std::mutex> lock(m_mutexTask);
|
|
@@ -160,7 +161,7 @@ void ThreadPool::managerThread()
|
|
|
|
|
|
if(numAdd > 0)
|
|
|
{
|
|
|
- // SPDLOG_INFO("需要添加{}个线程", numAdd);
|
|
|
+ // FMTLOG_INFO("需要添加{}个线程", numAdd);
|
|
|
createThread(numAdd);
|
|
|
continue; /* 直接下一个循环,无需检查需不需要销毁线程 */
|
|
|
}
|
|
@@ -168,7 +169,7 @@ void ThreadPool::managerThread()
|
|
|
}
|
|
|
|
|
|
/* 判断空闲线程是否过多,是否需要销毁几个线程 */
|
|
|
- // SPDLOG_DEBUG("***** 判断是否需要销毁线程 *****");
|
|
|
+ // FMTLOG_DEBUG("***** 判断是否需要销毁线程 *****");
|
|
|
/* 由于没规定每次销毁的线程个数,所以这里使用m_threadAddNum作为每次销毁的标准个数 */
|
|
|
if (num_idle > m_threadMaxIdle.load())
|
|
|
{
|
|
@@ -179,7 +180,7 @@ void ThreadPool::managerThread()
|
|
|
}
|
|
|
m_threadExitNum.exchange(num_Exit);
|
|
|
|
|
|
- SPDLOG_INFO("有{}个线程需要退出", m_threadExitNum.load());
|
|
|
+ FMTLOG_INFO("有{}个线程需要退出", m_threadExitNum.load());
|
|
|
/* 唤醒需要退出的num_idle个线程 */
|
|
|
for (int i = 0; i < num_Exit; i++)
|
|
|
{
|
|
@@ -189,10 +190,10 @@ void ThreadPool::managerThread()
|
|
|
/* 回收退出的线程 */
|
|
|
clearThread();
|
|
|
|
|
|
- // SPDLOG_INFO("线程池中的线程实例个数:{}", m_threads.size());
|
|
|
+ // FMTLOG_INFO("线程池中的线程实例个数:{}", m_threads.size());
|
|
|
std::this_thread::sleep_for(std::chrono::seconds(1));
|
|
|
}
|
|
|
- SPDLOG_INFO("管理线程退出...");
|
|
|
+ FMTLOG_INFO("管理线程退出...");
|
|
|
}
|
|
|
|
|
|
/**
|