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;
/* Make sure there is at least one thread per CPU */
int ncput = std::max(static_cast<unsigned int>(Application::GetConcurrency()) / QUEUECOUNT, 4U);
if (alive + tthreads < ncput)
tthreads = ncput - alive;
/* Make sure there is at least one thread per queue */
if (alive + tthreads < 1)
tthreads = 1 - alive;
/* Don't kill more than 8 threads at once. */
if (tthreads < -8)
tthreads = -8;
/* Don't kill more than 2 threads at once. */
if (tthreads < -2)
tthreads = -2;
/* Spawn more workers if there are outstanding work items. */
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)
tthreads = m_MaxThreads / (sizeof(m_Queues) / sizeof(m_Queues[0])) - alive;

View File

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