Make the ThreadPool spawn fewer threads

This commit is contained in:
Gunnar Beutner 2014-12-06 19:21:30 +01:00
parent 3cb2afd454
commit b5c7e2de4e
2 changed files with 8 additions and 9 deletions

View File

@ -265,18 +265,17 @@ void ThreadPool::ManagerThreadProc(void)
int tthreads = wthreads - alive; int tthreads = wthreads - alive;
/* Make sure there is at least one thread per CPU */ /* Make sure there is at least one thread per queue */
int ncput = std::max(static_cast<unsigned int>(Application::GetConcurrency()) / QUEUECOUNT, 4U); if (alive + tthreads < 1)
if (alive + tthreads < ncput) tthreads = 1 - alive;
tthreads = ncput - alive;
/* Don't kill more than 8 threads at once. */ /* Don't kill more than 2 threads at once. */
if (tthreads < -8) if (tthreads < -2)
tthreads = -8; tthreads = -2;
/* Spawn more workers if there are outstanding work items. */ /* Spawn more workers if there are outstanding work items. */
if (tthreads > 0 && pending > 0) if (tthreads > 0 && pending > 0)
tthreads = 8; tthreads = 2;
if (m_MaxThreads != UINT_MAX && (alive + tthreads) * (sizeof(m_Queues) / sizeof(m_Queues[0])) > m_MaxThreads) if (m_MaxThreads != UINT_MAX && (alive + tthreads) * (sizeof(m_Queues) / sizeof(m_Queues[0])) > m_MaxThreads)
tthreads = m_MaxThreads / (sizeof(m_Queues) / sizeof(m_Queues[0])) - alive; tthreads = m_MaxThreads / (sizeof(m_Queues) / sizeof(m_Queues[0])) - alive;

View File

@ -30,7 +30,7 @@
namespace icinga namespace icinga
{ {
#define QUEUECOUNT 4 #define QUEUECOUNT 4U
enum SchedulerPolicy enum SchedulerPolicy
{ {