diff options
| author | Dan Engelbrecht <[email protected]> | 2024-03-28 14:56:20 +0100 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2024-03-28 14:56:20 +0100 |
| commit | 76ac4d541c603dd869e18cfbc6644ebf6c6e22d7 (patch) | |
| tree | f919560d5ddb5a33057f9337d930ca327149dafd /src/zenutil/workerpools.cpp | |
| parent | add "fieldnames" query param for GetProjectFiles/GetProjectChunkInfos (#29) (diff) | |
| download | zen-76ac4d541c603dd869e18cfbc6644ebf6c6e22d7.tar.xz zen-76ac4d541c603dd869e18cfbc6644ebf6c6e22d7.zip | |
Use multithreading to fetch size/rawsize of entries in `/prj/{project}/oplog/{log}/chunkinfos` and `/prj/{project}/oplog/{log}/files` (#30)
- Improvement: Use multithreading to fetch size/rawsize of entries in `/prj/{project}/oplog/{log}/chunkinfos` and `/prj/{project}/oplog/{log}/files`
- Improvement: Add `GetMediumWorkerPool()` in addition to `LargeWorkerPool()` and `SmallWorkerPool()`
Diffstat (limited to 'src/zenutil/workerpools.cpp')
| -rw-r--r-- | src/zenutil/workerpools.cpp | 27 |
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(); } |