C++线程池
之前一直在找一个开源的C++线程池库,找了很久也没有找到一个好用的,后来项目需要,
本想自己写一个,但是无意中在github上面找了一个采用boost库实现的threadpool,后来研究
了一下源码,觉得非常好用。
代码地址:https://github.com/henkel/threadpool
1、代码风格:采用boost的风格,内部使用了大量的C++高级操作,包括了template,shared_ptr,traits;采用boost里面
的bind,future的库函数实现多态。
2、代码不到1000多行,实现很多功能,包括fifo,lifo,prifo等队列;
3、支持wait的超时操作;
4、支持多种任务执行,也就是说线程池中的可执行线程不受具体的task约束,如果不采用boost的bind操作,需要开发者使用
继承的思想来进行操作。
具体代码如下:
boost::shared_ptr<merge_job<image> > job(new merge_job<image>(data, partition*partition_size, partition_size));
schedule(tp, boost::bind(&merge_job<image>::run, job));
tp为线程池;
5、这个代码块代码的很好,但是少了一些文档,小弟我来补充一些:
测试数据地址:./libs/threadpool/example/mergesort/
直接编译:g++ mergesort.cpp -g -o mergesort -I../../../.. -I/usr/local/include/ -L/usr/local/lib -lpthread -lboost_thread
6、线程池可能出现的问题:
当在使用线程池的时候,特别容易忽视的一个问题就是当多个线程共享线程池的时候,可能一个线程的处理速度比较慢的的情况下,占用了
线程池的所有线程,将线程池中的任务队列占满,到时其他处理线程的处理性能下降,增大了超时。所以线程池的使用希望能够针对同一个
类型的任务分配一个线程池。
C++线程池的更多相关文章
- 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)
前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...
- C#多线程之线程池篇3
在上一篇C#多线程之线程池篇2中,我们主要学习了线程池和并行度以及如何实现取消选项的相关知识.在这一篇中,我们主要学习如何使用等待句柄和超时.使用计时器和使用BackgroundWorker组件的相关 ...
- C#多线程之线程池篇2
在上一篇C#多线程之线程池篇1中,我们主要学习了如何在线程池中调用委托以及如何在线程池中执行异步操作,在这篇中,我们将学习线程池和并行度.实现取消选项的相关知识. 三.线程池和并行度 在这一小节中,我 ...
- C#多线程之线程池篇1
在C#多线程之线程池篇中,我们将学习多线程访问共享资源的一些通用的技术,我们将学习到以下知识点: 在线程池中调用委托 在线程池中执行异步操作 线程池和并行度 实现取消选项 使用等待句柄和超时 使用计时 ...
- NGINX引入线程池 性能提升9倍
1. 引言 正如我们所知,NGINX采用了异步.事件驱动的方法来处理连接.这种处理方式无需(像使用传统架构的服务器一样)为每个请求创建额外的专用进程或者线程,而是在一个工作进程中处理多个连接和请求.为 ...
- Java线程池解析
Java的一大优势是能完成多线程任务,对线程的封装和调度非常好,那么它又是如何实现的呢? jdk的包下和线程相关类的类图. 从上面可以看出Java的线程池主的实现类主要有两个类ThreadPoolEx ...
- Android线程管理之ExecutorService线程池
前言: 上篇学习了线程Thread的使用,今天来学习一下线程池ExecutorService. 线程管理相关文章地址: Android线程管理之Thread使用总结 Android线程管理之Execu ...
- Android线程管理之ThreadPoolExecutor自定义线程池
前言: 上篇主要介绍了使用线程池的好处以及ExecutorService接口,然后学习了通过Executors工厂类生成满足不同需求的简单线程池,但是有时候我们需要相对复杂的线程池的时候就需要我们自己 ...
- -Android -线程池 批量上传图片 -附php接收代码
(出处:http://www.cnblogs.com/linguanh/) 目录: 1,前序 2,类特点 3,用法 4,java代码 5,php代码 1,前序 还是源于重构,看着之前为赶时间写着的碎片 ...
- C#多线程--线程池(ThreadPool)
先引入一下线程池的概念: 百度百科:线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务.线程池线程都是后台线程.每个线程都使用默认的堆栈大小,以默认的优先级运行, ...
随机推荐
- Sublime text3 常用插件 安装
1 安装插件前的准备工作 首先确保你的Sublime Text3编辑器为官方版(非破解版),建议下载官网的便携版本(好处多多). 然后安装插件管理工具(Package Control) 1.1 打开S ...
- MFC编程入门之二十一(常用控件:编辑框Edit Control)
上一节讲了静态文本框,本节讲的是编辑框(Edit Control)同样是一种很常用的控件,我们可以在编辑框中输入并编辑文本.在前面加法计算器的例子中已经演示了编辑框的基本应用.下面具体讲解编辑框的使用 ...
- MVC使用x.PagedList分页
MVC分页 1.Install Package Tools=> NuGet Package Manager=>Manager NuGet Packages of Solution
- OpenCV2的Mat矩阵形式自定义初始化
我们知道,OpenCV2的矩阵形式是Mat,那么Mat矩阵的初始化怎么自定义呢 ?由于比较简单,文字部分我就不多加说明了,见代码,有下面几种: //////////////////////////// ...
- [ubunut]打造Ubuntu下Java开发环境 (转)
http://www.cnblogs.com/wufengtinghai/p/4542366.html 遇到困难: A Java Runtime Environment (JRE) or Java D ...
- swift_枚举 | 可为空类型 | 枚举关联值 | 枚举递归 | 树的概念
***************可为空的类型 var demo2 :we_demo = nil 上面这个代码串的语法是错的 为什么呢, 在Swift中,所有的类型定义出来的属性的默认值都不可以是nil ...
- css学习笔记 5
将css引入到html页面中的方法: 用style属性设置样式 用<style>标签设置样式 用<link>标签引入外部样式文件 用@import引入外部样式文件 <li ...
- 解决: org.iq80.leveldb.DBException: IO error: C:\data\trie\000945.sst: Could not create random access file.
以太坊MPT树的持久化层是采用了leveldb数据库,然而在抽取MPT树代码运行过程中,进行get和write操作时却发生了错误: Caused by: org.fusesource.leveldbj ...
- web自学网站
coursera 网站很多新的技术,都是大牛和牛大学的,和外国新技术. 我要自学网 有好也有不怎么样的,一般般的.但是dome多. 中国教程网 一般. CSDN 技术相关 站长 ...
- 生产排产表DL-ZPPR002
*&---------------------------------------------------------------------* *& Report ZPPR002 * ...