线程池 | 测试代码
线程池 | 测试代码123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596#include"threadpool.h"#include<chrono>using namespace std;/*有些场景是希望能够获取线程执行任务的返回值的举例:1+.....+30000的和thread1 1+..+10000thread2 10001+...+20000....main thread:给每个线程分配计算的区间,并等待算完的结果最后合并*/class MyTask :public Task{public: MyTask(int begin,int...
线程池 | Thread、ThreadPool类
线程池 | Thread、ThreadPool类1.线程池支持的模式123456//线程池支持的模式enum class PoolMode{ MODE_FIXED,//固定数量的线程 MODE_CACHED,//线程数量可动态增长}; 2.Thread类12345678910111213141516171819202122//线程类型class Thread{public: using ThreadFunc = std::function<void(int)>; //线程构造 Thread(ThreadFunc func); //线程析构 ~Thread(); //启动线程 void start(); //获取线程id int getId() const;private: ThreadFunc func_;//回调函数 static int generateId_;//单调自增的一个id,用来标识一个线程 int...
线程池 | ThreadPool的submitTask和threadFunc方法
线程池 | ThreadPool的submitTask和threadFunc方法123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263//线程池类型class ThreadPool{public: ThreadPool(); ~ThreadPool(); //设置线程池工作模式 void setMode(PoolMode mode); //设置task任务队列上限阈值 void setTaskQueMaxThresHold(int threshold); //设置线程池cached模式下线程数量上限 void setthreadSizeThresHold(int threshold); //给线程池提交任务 Result submitTask(std::shared_ptr<Task> sp); //启动线程池 返回值是当前电脑的CPU核心数量 void start(int...
线程池 | Result、Task类
线程池 | Result、Task类1.Task类123456789101112131415//任务抽象基类class Task{public: Task(); ~Task() = default; void exec(); void setResult(Result* res); //用户可以自定义任意任务类型,从Task继承,重写run方法,实现自定义任务处理 virtual Any run() = 0;private: //不用shared是避免了智能指针交叉引用的问题 Result* result_;//Result 的生存周期要长于Task}; 使用时,用户自己定义一个mytask类继承Task类,重写run方法完成自己想要的任务即可。 exec就是用来执行run()方法的一个包装函数 123456789101112131415//////////Task方法实现Task::Task():result_(nullptr){}void Task::exec(){ if (result_ !=...
线程池 | Any、Semaphore类
线程池 | Any、Semaphore类1.Any类123456789101112131415161718192021222324252627282930313233343536373839404142434445464748//Any类 表示可以接受任意数据的类型class Any{public: Any() = default; ~Any() = default; Any(const Any&) = delete; Any& operator=(const Any&) = delete; Any(Any&&) = default; Any& operator=(Any&&) = default; //这个构造函数可以让Any类型接受任意其它的数据 template <typename T> Any(T...
线程池项目总概述
线程池项目环境:vs2019开发,C++17标准;centos7编译so动态库 1.项目介绍作为五大池之一(内存池、连接池、线程池、进程池、协程池),线程池的应用非常广泛,不管是客户 端程序,还是后台服务程序,都是提高业务处理能力的必备模块。有很多开源的线程池实现,虽然各自 接口使用上稍有区别,但是其核心实现原理都是基本相同的。 2.知识背景熟练C++面向对象编程和C++ 11编程 1.熟练基于C++...
泰坦尼克号生存的预测任务
泰坦尼克号生存的预测任务学校作业,我来水一水 环境:pycharm+anaconda虚拟环境 0.环境搭建参考:学校机器学习_为了前进而后退,为了走直路而走弯路的博客-CSDN博客 1 目的与要求(1)目的: 本任务旨在使用机器学习算法预测泰坦尼克号乘客的生存情况。根据乘客的个人信息(如年龄、性别、船舱等级等),使用合适的模型来判断该乘客是否在事故中幸存。模型将对给定的测试集进行预测,并生成预测结果。(2)采用不同的机器学习算法进行建模(如:决策树、朴素贝叶斯、支持向量机)。对模型的性能进行评估,计算准确率。对比不同模型的准确率,通过可视化手段展示结果(如准确率折线图、混淆矩阵等)。输出每个模型的可视化结果并保存(如决策树的图示、特征重要性等)。 2 任务背景泰坦尼克号(RMS Titanic)是世界历史上最著名的沉船之一,1912年4月15日沉没。在事故中,约有1500多人失去了生命。根据该事件的相关数据集(包含乘客的个人信息及生死状态),我们可以构建模型预测乘客的生存概率。数据集包含的特征有:乘客的年龄、性别、船舱等级、票价、家庭成员数量等。 3...
基于VSCode和CMake实现的C/C++开发-Linux篇
基于VSCode和CMake实现的C/C++开发-Linux篇本次课程适合的对象: Linux零基础,想了解最常用的高频Linux命令的小伙伴 只会在Windows开发C/C++,需要转Linux开发的小伙伴 想深入了解并掌握GCC编译器编译语法和规则的小伙伴 想深入了解并掌握GDB调试器命令行调试的小伙伴 想学习使用CMake构建**C/C++**工程的小伙伴 想学习Linux下使用VSCode进行**C/C++**开发的小伙伴 总而言之,本课程将从零开始,教会你如何在Linux开发C/C++,带领你一起打开新世界的大门~ 系统环境:Ubuntu18.04 LTS 虚拟机 开发语言:C++ 开发IDE ...
Windows下Python+PyCharm的安装步骤及PyCharm的使用
Windows下Python+PyCharm的安装步骤及PyCharm的使用一、Python的安装(1)环境准备python是一门跨平台的语言,如Windows、Linux、MacOS等平台都能完美兼容,以下只对Windows平台安装做详细介绍。 Windows PC python3.6.4 python官方下载:Python Releases for Windows | Python.org,可根据自己需要下载版本。 我下载的是python3.6.4,比较老的一个版本了,选择Download Windows x86-64 executable installer,下载64位的: 注意:“x86”是指32位的操作系统,“x86-64”是指64位的操作系统。 (2)Python安装 python安装非常简单,双击下载好的安装包,进入选择安装方式 第一种:Install Now 立即安装,即采用默认安装方式,不能自行指定安装的路径。 第二种:Customize installation...
pycharm+anaconda创建项目
pycharm+anaconda创建项目安装: Windows下Python+PyCharm的安装步骤及PyCharm的使用-CSDN博客 详细Anaconda安装+配置+环境创建教程-CSDN博客 创建项目: 开始尝试新建一个项目吧!选择好项目建设的文件夹我的项目命名为:pythontset,选择自定义环境-select existing(已存在环境),类型可选择conda(这就是前边已经配置好的anaconda环境),点击创建。这里我的test项目就已经创建完成了输入print(“hello world”), 运行一下试试看! 成功。














