aboutsummaryrefslogtreecommitdiff
path: root/src/zenutil/workerpools.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/zenutil/workerpools.cpp')
-rw-r--r--src/zenutil/workerpools.cpp27
1 files changed, 25 insertions, 2 deletions
diff --git a/src/zenutil/workerpools.cpp b/src/zenutil/workerpools.cpp
index 3ae302064..939f3a1c4 100644
--- a/src/zenutil/workerpools.cpp
+++ b/src/zenutil/workerpools.cpp
@@ -11,14 +11,16 @@ ZEN_THIRD_PARTY_INCLUDES_END
namespace zen {
namespace {
- const int LargeWorkerThreadPoolTreadCount = gsl::narrow<int>(std::thread::hardware_concurrency());
- const int SmallWorkerThreadPoolTreadCount = gsl::narrow<int>(Max((std::thread::hardware_concurrency() / 4u), 1u));
+ const int LargeWorkerThreadPoolTreadCount = gsl::narrow<int>(std::thread::hardware_concurrency());
+ const int MediumWorkerThreadPoolTreadCount = gsl::narrow<int>(Max((std::thread::hardware_concurrency() / 4u), 1u));
+ const int SmallWorkerThreadPoolTreadCount = gsl::narrow<int>(Max((std::thread::hardware_concurrency() / 8u), 1u));
static bool IsShutDown = false;
RwLock PoolLock;
std::unique_ptr<WorkerThreadPool> LargeWorkerPool;
+ std::unique_ptr<WorkerThreadPool> MediumWorkerPool;
std::unique_ptr<WorkerThreadPool> SmallWorkerPool;
std::unique_ptr<WorkerThreadPool> SyncWorkerPool;
} // namespace
@@ -44,6 +46,26 @@ GetLargeWorkerPool()
}
WorkerThreadPool&
+GetMediumWorkerPool()
+{
+ {
+ RwLock::SharedLockScope _(PoolLock);
+ if (MediumWorkerPool)
+ {
+ return *MediumWorkerPool;
+ }
+ }
+ RwLock::ExclusiveLockScope _(PoolLock);
+ ZEN_ASSERT(!IsShutDown);
+ if (MediumWorkerPool)
+ {
+ return *MediumWorkerPool;
+ }
+ MediumWorkerPool.reset(new WorkerThreadPool(MediumWorkerThreadPoolTreadCount, "MediumThreadPool"));
+ return *MediumWorkerPool;
+}
+
+WorkerThreadPool&
GetSmallWorkerPool()
{
{
@@ -89,6 +111,7 @@ ShutdownWorkerPools()
RwLock::ExclusiveLockScope _(PoolLock);
IsShutDown = true;
LargeWorkerPool.reset();
+ MediumWorkerPool.reset();
SmallWorkerPool.reset();
SyncWorkerPool.reset();
}