|
@@ -136,30 +136,42 @@ void ThreadPool::managerThread()
|
|
|
int numTask = (int)m_queue_Tasks.size(); /* 获取任务队列中的任务个数 */
|
|
|
lock.unlock();
|
|
|
int numAdd = 0;
|
|
|
- if(numTask > 0)
|
|
|
+ /* 重新修改增加数目,正常情况下增加 numTask + m_threadMiniIdle - num_idle 数目,达到最低空闲线程个数,
|
|
|
+ 如果二者之和超过了最大线程数,就添加可以添加的最多数目 */
|
|
|
+ // if(numTask > 0)
|
|
|
+ // {
|
|
|
+ // /* 任务数 + 存在的线程个数是否大于最大线程数 */
|
|
|
+ // if( numTask + m_threadLiveNum.load() <= m_threadMaxNum )
|
|
|
+ // {
|
|
|
+ // /* 创建numTask个线程 */
|
|
|
+ // numAdd = numTask;
|
|
|
+ // }
|
|
|
+ // /* 默认添加的个数 + 存在的线程数是否大于最大线程数 */
|
|
|
+ // else if ( (m_threadAddNum.load() + m_threadLiveNum.load()) <= m_threadMaxNum)
|
|
|
+ // {
|
|
|
+ // /* 创建m_threadAddNum个线程 */
|
|
|
+ // numAdd = m_threadAddNum.load();
|
|
|
+ // }
|
|
|
+ // /* 能添加几个线程就添加几个线程 */
|
|
|
+ // else
|
|
|
+ // {
|
|
|
+ // numAdd = m_threadMaxNum - m_threadLiveNum.load();
|
|
|
+ // }
|
|
|
+
|
|
|
+ // } else
|
|
|
+ // {
|
|
|
+ // /* 没有新任务,但是空闲线程数低于设置的最小空闲线程数 */
|
|
|
+ // numAdd = m_threadMiniIdle.load() - num_idle;
|
|
|
+ // }
|
|
|
+ numAdd = numTask + m_threadMiniIdle.load() - num_idle;
|
|
|
+ if(numAdd < 0)
|
|
|
{
|
|
|
- /* 任务数 + 存在的线程个数是否大于最大线程数 */
|
|
|
- if( numTask + m_threadLiveNum.load() <= m_threadMaxNum )
|
|
|
- {
|
|
|
- /* 创建numTask个线程 */
|
|
|
- numAdd = numTask;
|
|
|
- }
|
|
|
- /* 默认添加的个数 + 存在的线程数是否大于最大线程数 */
|
|
|
- else if ( (m_threadAddNum.load() + m_threadLiveNum.load()) <= m_threadMaxNum)
|
|
|
- {
|
|
|
- /* 创建m_threadAddNum个线程 */
|
|
|
- numAdd = m_threadAddNum.load();
|
|
|
- }
|
|
|
- /* 能添加几个线程就添加几个线程 */
|
|
|
- else
|
|
|
- {
|
|
|
- numAdd = m_threadMaxNum - m_threadLiveNum.load();
|
|
|
- }
|
|
|
+ numAdd = 0; /* 如果计算出来的添加数目小于0,就不添加 */
|
|
|
}
|
|
|
- /* 空闲线程数低于设置的最小空闲线程数 */
|
|
|
- else
|
|
|
+ /* 如果添加的线程数目超过了最大线程数,就添加可以添加的最多数目 */
|
|
|
+ if (numAdd + m_threadLiveNum.load() > m_threadMaxNum)
|
|
|
{
|
|
|
- numAdd = m_threadMiniIdle.load() - num_idle;
|
|
|
+ numAdd = m_threadMaxNum - m_threadLiveNum.load();
|
|
|
}
|
|
|
|
|
|
if(numAdd > 0)
|
|
@@ -171,6 +183,11 @@ void ThreadPool::managerThread()
|
|
|
|
|
|
}
|
|
|
|
|
|
+ if(m_threadLiveNum .load() >= m_threadMaxNum)
|
|
|
+ {
|
|
|
+ LOG_DEBUG("线程池中现存的线程个数: " << m_threadLiveNum.load() << ",超过最大线程数: " << m_threadMaxNum);
|
|
|
+ }
|
|
|
+
|
|
|
/* 判断空闲线程是否过多,是否需要销毁几个线程 */
|
|
|
// LOG_DEBUG("***** 判断是否需要销毁线程 *****");
|
|
|
/* 由于没规定每次销毁的线程个数,所以这里使用m_threadAddNum作为每次销毁的标准个数 */
|
|
@@ -183,7 +200,7 @@ void ThreadPool::managerThread()
|
|
|
}
|
|
|
m_threadExitNum.exchange(num_Exit);
|
|
|
|
|
|
- LOG_INFO("有" << m_threadExitNum.load() << "个线程需要退出");
|
|
|
+ LOG_DEBUG("有" << m_threadExitNum.load() << "个线程需要退出");
|
|
|
/* 唤醒需要退出的num_idle个线程 */
|
|
|
for (int i = 0; i < num_Exit; i++)
|
|
|
{
|
|
@@ -207,6 +224,11 @@ void ThreadPool::managerThread()
|
|
|
*/
|
|
|
void ThreadPool::createThread(int num)
|
|
|
{
|
|
|
+ if(num <=0 )
|
|
|
+ {
|
|
|
+ LOG_WARN("创建线程的个数不能小于等于0");
|
|
|
+ return;
|
|
|
+ }
|
|
|
for (int i = 0; i < num; i++)
|
|
|
{
|
|
|
/* 创建线程,传入工作函数 */
|