简单使用Boost线程池threadpool
场景:
1.在一些多线程的程序中,比如服务端响应请求时,可以同时响应多个客户端的请求,但是响应请求的个数(即线程)的个数过多的话就会造成系统资源损耗过多而宕机,还比在做一些下载的程序时,可同时开5个下载任务,对应的其实就是线程。但是最多线程是有上限的,而且每次创建线程和销毁线程都会大量损耗资源和时间。所以解决办法之一就是使用线程池控制线程个数,复用创建过的线程。
threadpool直接使用Boost库,不需要另外编译Boost库
只是开启线程,调度线程的数量,不对单个线程进程操作(比如暂停,恢复,停止)
编译的时候注意加上链接库:
LIBS := -lboost_thread
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <boost/threadpool.hpp>using namespace std;
using namespace boost::threadpool;void task_1()
{cout << "task_1 start" << endl;cout << "thead_id(task_1): " << boost::this_thread::get_id() << endl;for (int i = 0; i < 10; i++){cout << "1111111111111111111111111" << endl;sleep(1);}
}void task_2()
{cout << "task_2 start" << endl;cout << "thead_id(task_2): " << boost::this_thread::get_id() << endl;for (int i = 0; i < 30; i++){cout << "222222222222222222222222" << endl;sleep(1);}
}void DoGetVersionNoForUpdate(int a)
{cout << "task_3 start" << endl;cout << "thead_id(task_3): " << boost::this_thread::get_id() << endl;for (int i = 0; i < 5; i++){cout << a*a << endl;sleep(1);}
}int main(int argc, char *argv[])
{//设置允许开启的线程数pool tp(10);//加入线程调度,可以通过指针传参tp.schedule(&task_1);tp.schedule(&task_2);int i =10;tp.schedule(boost::bind(DoGetVersionNoForUpdate, i));//tp.wait();return (0);
}
简单使用Boost线程池threadpool相关推荐
- C#.Net使用线程池(ThreadPool)与专用线程(Thread)
线程池(ThreadPool)使用起来很简单,但它有一些限制: 1. 线程池中所有线程都是后台线程,如果进程的所有前台线程都结束了,所有的后台线程就会停止.不能把入池的线程改为前台线 程. 2. 不能 ...
- C# 线程池ThreadPool
什么是线程池?为什么要用线程池?怎么用线程池? 1. 什么是线程池? .NET Framework的ThreadPool类提供一个线程池,该线程池可用于执行任务.发送工作项.处理异步 I/O.代表其他 ...
- 手撸一款简单高效的线程池(五)
在之前的内容中,我们给大家介绍了 C++实现线程池过程中的一些常用线优化方案,并分析了不同机制使用时的利弊.这一篇,是线程池系列的最后一章.我们会介绍一下 CGraph 中的 threadpool 如 ...
- C# 线程池 ThreadPool
1. 线程池整体概括: 创建线程还是比较简单的,但是由于线程的创建和销毁需要耗费一定的开销(默认情况下,主线程占用1M,子线程占用512KB,线程越多,占用内存也越多),过多的使用线程反而会造成内存资 ...
- 手撕线程池 ThreadPool
为了更加方便理解线程池 我们都知道线程池和任务就好比生产者消费者之间的关系也就是如图! 先分析:我们可以将线程池中的线程看作消费者,可以将main(只是方便测试)看作生产者 总体思路: 实现一个阻塞队 ...
- threadpool的数量_多线程之旅(11)_如何限制系统线程池ThreadPool的最大最小并发数量_SetMaxThreads/SetMinThreads用法...
ThreadPool有两个设置线程池并发数量的方法,分别是: ThreadPool.SetMinThreads(int workerThreads, int completionPortThreads ...
- 美团简单版动态线程池源码实现
背景 动态线程池,指的是线程池中的参数可以动态修改并生效,比如corePoolSize.maximumPoolSize等. 在工作中,线程池的核心线程数和最大线程数等参数是很难估计和固定的,如果能在应 ...
- 线程池(ThreadPool)
线程池ThreadPool 1.线程池简介 2.线程池参数说明(重点) 2.1 常用参数说明 2.2 拒绝策略(重点) 3.线程池底层工作原理 4.入门案例 1.线程池简介 线程池(英语:thre ...
- Java线程池ThreadPool详解
Java线程池ThreadPool详解 1. 线程池概述 1.1 线程池简介 1.2 线程池特点 1.3 线程池解决问题 2. 线程池原理分析 2.1 线程池总体设计 2.6 线程池流转状态 2.2 ...
最新文章
- 实现EditText输入金额(小数点后两位)
- RK3399如何选择系统呢?
- boost::uuid模块实现用窄存档测试序列化 uuid的测试程序
- 小技巧:用python迅速打印Java写 的Flink代码中的hive建表语句
- C# dataGridView控件实用属性及事件总结
- 【数据结构】堆、堆排序笔记
- 企业信息化投入中咨询服务_嘉萱企业管理咨询服务 让发展中的企业真正实现全面性效益增长...
- Java:idea查看JDK源码
- USB Type C 接口引脚详解
- 业务方如何理解产品,更顺利地推进产品需求?
- 用rpa必须会用python语言_几步教你用 Python 制作一个 RPA 机器人!
- Python实验四:Python程序设计之文件
- NX二次开发 UFUN创建倒角特征 UF_MODL_create_chamfer
- python学习——廖雪峰网站
- 第三篇 考研这一年
- EMC启航:我们为什么要做EMC
- 跳绳机 高频霍尔开关 MH253
- iOS中CAShapeLayer用法
- Linux环境下安装TASSEL_5_standalone
- 使用GPU版PYtorch,踩过的坑(PYtorch版本和GPU版本不对应问题)