您好,登录后才能下订单哦!
本篇文章给大家分享的是有关JAVA线程池的C++线程池该怎么实现,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
什么是线程池
线程池(thread pool)是一种线程使用模式。线程过多或者频繁创建和销毁线程会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着管理器分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价,以及保证了线程的可复用性。线程池不仅能够保证内核的充分利用,还能防止过分调度。
线程池的实现
线程池在JAVA平台上已经有成熟的实现方式,本文介绍参考JAVA线程池实现方式实现的C++线程池类库。
该类库代码已上传至github仓库中,下载地址为:https://github.com/xiaoba-8/mixthread
该类库中主要的类的关系如下图所示:
线程池类图
其中,IRuanble为接口类,类似JAVA中的Runnable接口;
DefulatMutext 为访问互斥体类,用于临界资源时的加解锁;
RootThread为线程实现的基类,定义了线程中的通用的方法;
CommonThread为一个简单的线程实现类,类似于JAVA中的Thread类;
DefaultThread类为另一线程实现类,以IRunnable为参数,可将IRunnable转化为线程;
ThreadPool为线程池实现类,类似JAVA中的ThreadPool类。
类库的安装方法
1. 下载类库实现源代码:https://github.com/xiaoba-8/mixthread
2. 进入类库根文件夹依次执行configure,make, make install
类库的使用方法
与JAVA线程池的使用方式相似,首先创建实现IRunnable接口的类,然后交由ThreadPool类实例进行调度即可以。
以下按示例代码:
1. 创建demo_main.cpp文件,代码如下:
#include <stdio.h>#include <mix/thread/ThreadPool.h>class DemoThread : public mix::IRunnable{private: int id;public: DemoThread(int id) { this->id = id; } virtual void Run() { for (int i = 0; i < 3; i++) { usleep(500); printf("Thread %d: loop index %d\n", id, i); } } virtual bool IsDelete () { return true; } virtual int Priority() { return 0; } virtual void SetPriority(int priority) { } virtual void Cancel() { } virtual bool IsCanceled() { return false; } virtual void Pause() {} virtual void Resume() {} virtual bool IsPaused() { return false; } virtual std::string GetTaskId() { return ""; } virtual void TryPause() { }};int main(int argc, char *argv[]){ mix::ThreadPool threadPool(10, 20, 5); printf("Mix Thread Begin\n"); for (int i = 0; i < 5; i++) { threadPool.Execute(new DemoThread(i)); } sleep(1); while (threadPool.GetActiveCount() > 0) { sleep(1); } printf("Mix Thread End\n"); return 0;}
2. 执行以下命令进行编译,(假设mixthread安装在/usr/local目录下)
g++ -I/usr/local/include -g -O2 demo_main.cpp -pthread -o mix_thread_demo -lmixthread -pthread -Wl,-rpath -Wl,/usr/local/lib
生成执行程序mix_thread_demo
3. 执行结果
执行 ./mix_thread_demo, 显示如下结果
./mix_thread_demoMix Thread BeginThread 3: loop index 0Thread 4: loop index 0Thread 2: loop index 0Thread 1: loop index 0Thread 0: loop index 0Thread 4: loop index 1Thread 3: loop index 1Thread 2: loop index 1Thread 1: loop index 1Thread 0: loop index 1Thread 4: loop index 2Thread 3: loop index 2Thread 2: loop index 2Thread 1: loop index 2Thread 0: loop index 2Mix Thread End
以上就是JAVA线程池的C++线程池该怎么实现,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。