From 1928fcfa7f405bdea09ef45cacee302266aa73f3 Mon Sep 17 00:00:00 2001 From: chunelfeng Date: Fri, 7 Oct 2022 16:29:41 +0800 Subject: [PATCH] =?UTF-8?q?feat=20:=20=E6=8F=90=E4=BE=9B=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E5=BC=80=E5=90=AF=E8=BE=85=E5=8A=A9=E7=BA=BF=E7=A8=8B=E7=9A=84?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 10 +++++++++- README.md | 7 +++++-- src/UtilsCtrl/ThreadPool/UThreadPool.cpp | 8 ++++++++ src/UtilsCtrl/ThreadPool/UThreadPoolConfig.h | 1 + src/UtilsCtrl/ThreadPool/UThreadPoolDefine.h | 3 ++- 5 files changed, 25 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1ddbd30..11d742d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,15 @@ +message("* * * * * * * * * * * * * * * * *") +message("* _____ _______ _____ *") +message("* / ____| |__ __| | __ \\ *") +message("* | | | | | |__) | *") +message("* | | | | | ___/ *") +message("* | |____ | | | | *") +message("* \\_____| |_| |_| *") +message("* * * * * * * * * * * * * * * * *") cmake_minimum_required(VERSION 3.2.5) -project(CThreadPool VERSION 1.0.0) +project(CThreadPool VERSION 1.0.1) set(CMAKE_CXX_STANDARD 14) diff --git a/README.md b/README.md index 138402d..a4c05c9 100644 --- a/README.md +++ b/README.md @@ -16,14 +16,14 @@ 由于是CGraph项目中的剥离出来的功能类,故在项目中保留了多处 `CGRAPH_*` 的命名方式,仅将 namespace 修改为 `CTP`,预计今后与CGraph相互独立更新。 -本项目参考了[《C++并发编程实战(第二版)》](https://nj.gitbooks.io/c/content/) 中的部分内容,和github上部分相关的优秀工程。并在此基础上进行大量的改动、扩展和优化,在功能、性能和易用性上均有较大的提升。 +本项目参考了[《C++并发编程实战(第二版)》](https://nj.gitbooks.io/c/content/) 中的部分内容,和github上的一些优秀实现。并在此基础上进行大量的改动、扩展和优化,在功能、性能和易用性上均有较大的提升。 在开发过程中,也沉淀了详细的说明文档(见下方 推荐阅读),以便于大家快速了解代码和思路,也请大家不吝指教。 ## 二. 编译说明 * 本工程支持MacOS、Linux和Windows系统,无任何第三方依赖。推荐使用C++14(默认)或以上版本,不支持C++11或以下版本 -* 使用CLion作为IDE的开发者,或使用Visual Studio 15(或以上版本)作为IDE的开发者,打开CMakeLists.txt文件作为工程,即可编译通过 +* 使用`CLion`或使用`Visual Studio 15`(或以上版本)作为IDE的开发者,打开`CMakeLists.txt`文件作为工程,即可编译通过 * Linux环境开发者,在命令行模式下,输入以下指令,即可编译通过 ```shell @@ -73,6 +73,9 @@ void tutorial() { * 提供线程池基本功能 * 提供对应的tutorial信息 +[2022.10.07 - v1.0.1 - Chunel] +* 提供默认开启辅助线程的配置 + ------------ #### 附录-2. 联系方式 * 微信: ChunelFeng diff --git a/src/UtilsCtrl/ThreadPool/UThreadPool.cpp b/src/UtilsCtrl/ThreadPool/UThreadPool.cpp index 4b431b9..04df234 100644 --- a/src/UtilsCtrl/ThreadPool/UThreadPool.cpp +++ b/src/UtilsCtrl/ThreadPool/UThreadPool.cpp @@ -63,6 +63,14 @@ CStatus UThreadPool::init() { } CGRAPH_FUNCTION_CHECK_STATUS + /** + * 策略更新: + * 初始化的时候,也可以创建n个辅助线程。目的是为了配合仅使用 pool中 priority_queue 的场景 + * 一般情况下,建议为0。 + */ + status = createSecondaryThread(config_.secondary_thread_size_); + CGRAPH_FUNCTION_CHECK_STATUS + is_init_ = true; CGRAPH_FUNCTION_END } diff --git a/src/UtilsCtrl/ThreadPool/UThreadPoolConfig.h b/src/UtilsCtrl/ThreadPool/UThreadPoolConfig.h index 6afca86..518d893 100644 --- a/src/UtilsCtrl/ThreadPool/UThreadPoolConfig.h +++ b/src/UtilsCtrl/ThreadPool/UThreadPoolConfig.h @@ -17,6 +17,7 @@ CGRAPH_NAMESPACE_BEGIN struct UThreadPoolConfig : public UThreadObject { /** 具体值含义,参考UThreadPoolDefine.h文件 */ int default_thread_size_ = CGRAPH_DEFAULT_THREAD_SIZE; + int secondary_thread_size_ = CGRAPH_SECONDARY_THREAD_SIZE; int max_thread_size_ = CGRAPH_MAX_THREAD_SIZE; int max_task_steal_range_ = CGRAPH_MAX_TASK_STEAL_RANGE; int max_local_batch_size_ = CGRAPH_MAX_LOCAL_BATCH_SIZE; diff --git a/src/UtilsCtrl/ThreadPool/UThreadPoolDefine.h b/src/UtilsCtrl/ThreadPool/UThreadPoolDefine.h index 5126735..30dcef7 100644 --- a/src/UtilsCtrl/ThreadPool/UThreadPoolDefine.h +++ b/src/UtilsCtrl/ThreadPool/UThreadPoolDefine.h @@ -52,7 +52,8 @@ static const int CGRAPH_LONG_TIME_TASK_STRATEGY = -101; /** * 以下为线程池配置信息 */ -static const int CGRAPH_DEFAULT_THREAD_SIZE = (CGRAPH_CPU_NUM > 0) ? CGRAPH_CPU_NUM : 8; // 默认主线程个数 +static const int CGRAPH_DEFAULT_THREAD_SIZE = 8; // 默认主线程个数 +static const int CGRAPH_SECONDARY_THREAD_SIZE = 0; // 默认开启辅助线程个数 static const int CGRAPH_MAX_THREAD_SIZE = (CGRAPH_DEFAULT_THREAD_SIZE * 2) + 1; // 最大线程个数 #ifndef _WIN32 static const int CGRAPH_MAX_TASK_STEAL_RANGE = 2; // 盗取机制相邻范围