boost::threadpool线程池使用实例

前言:

  • 什么是多线程?比如在做一些下载的程序时,同时开启5个下载任务,对应的其实就是多线程。在一些多线程的程序中,响应请求的个数(即线程)的个数过多的话就会造成系统资源损耗过多而宕机,一般最多线程是有上限的,而且每次创建线程和销毁线程都会大量损耗资源和时间。所以解决办法之一就是使用线程池控制线程个数,复用创建过的线程。
  • 线程池可以减少创建和切换线程的额外开销,利用已经存在的线程多次循环执行多个任务从而提高系统的处理能力。

示例:

#include <iostream>
#include <boost/bind.hpp>
#include <boost/threadpool.hpp>
using namespace std;
using namespace boost::threadpool;

// 下面是3个不带参数的线程执行函数和一个带参数的线程执行函数
void first_task()
{
   for (int i = 0; i < 30; ++i)
   cout << "first" << i << endl;
}
void second_task()
{
   for (int i = 0; i < 30; ++i)
   cout << "second" << i << endl;
}
void third_task()
{
   for (int i = 0; i < 30; ++i)
   cout << "third" << i << endl;
}
void task_with_parameter(int value, string str)
{
  printf("task_with_parameter with int=(%d).\n" ,value);
  printf("task_with_parameter with string=(%s).\n" ,str.c_str());
}
void execute_with_threadpool()
{
  // 创建一个线程池,初始化为2个线程
  pool tp(2);

  // 调用4个线程函数
  tp.schedule(&first_task); // 不带参数的执行函数
  tp.schedule(&second_task);
  tp.schedule(&third_task);
  tp.schedule(boost::bind(task_with_parameter, 8, "hello")); // 带两个参数的执行函数
  // 这儿函数会等到4个线程全部执行结束才会退出
}
int main(int argc, const char* argv[])
{
    execute_with_threadpool();
}
时间: 2024-10-12 02:48:05

boost::threadpool线程池使用实例的相关文章

浅谈ThreadPool 线程池(引用)

出自:http://www.cnblogs.com/xugang/archive/2010/04/20/1716042.html 浅谈ThreadPool 线程池 相关概念: 线程池可以看做容纳线程的容器: 一个应用程序最多只能有一个线程池: ThreadPool静态类通过QueueUserWorkItem()方法将工作函数排入线程池: 每排入一个工作函数,就相当于请求创建一个线程: 线程池的作用: 线程池是为突然大量爆发的线程设计的,通过有限的几个固定线程为大量的操作服务,减少了创建和销毁线程

ThreadPool线程池 小结

ThreadPool类提供一个线程池,该线程池可用于发送工作项.处理异步 I/O.代表其他线程等待以及处理计时器 线程池通过为应用程序提供一个由系统管理的辅助线程池使您可以更为有效地使用线程.一个线程监视排到线程池的若干个等待操作的状态.当一个等待操作完成时,线程池中的一个辅助线程就会执行对应的回调函数 托管线程池中的线程为后台线程,即它们的 IsBackground 属性为 true.这意味着在所有的前台线程都已退出后,ThreadPool 线程不会让应用程序保持运行 也可以将与等待操作不相关

转载【浅谈ThreadPool 线程池】

浅谈ThreadPool 线程池 http://www.cnblogs.com/xugang/archive/2010/04/20/1716042.html

Delphi ThreadPool 线程池(Delphi2009以上版本适用)

http://blog.sina.com.cn/s/blog_6250a9df0101kref.html 在网上查找Delphi线程池,结果发现寥寥无几. 看了半天源代码,弄得一头雾水,觉得不容易理解和使用,于是自己想写一个线程池. 什么样的线程池更好呢? 我觉得使用起来要可靠,并且一定要简单,这样才是更好的. 我写的线程池就是这样一个标准,使用非常简单,只传入自己要执行的方法就可以了, 其实大家最后就是关注自己要操作的方法,其余的交给线程池.全部源代码如下: { {单元:ThreadPoolU

ThreadPool线程池

1.GetMaxThreads,GetMinThreads class Program { static void Main(string[] args) { int workerThreads; int completePortsThreads; ThreadPool.GetMaxThreads(out workerThreads, out completePortsThreads); Console.WriteLine("线程池中最大的线程数{0},线程池中异步IO线程的最大数目{1}&qu

【python】Threadpool线程池任务终止简单示例

需求 加入我们需要处理一串个位数(0~9),奇数时需要循环打印它:偶数则等待对应时长并完成所有任务:0则是错误,但不需要终止任务,可以自定义一些处理. 关键点 定义func函数处理需求 callback处理返回结果,只有偶数和0返回:奇数会一直执行:要控制线程池状态,则需要针对偶数和0时抛出异常,并捕获异常处理. threadpool定义线程池并发 实现 # -*- coding: utf-8 -*-from threadpool import makeRequests, ThreadPooli

boost的线程池和内存池 智能指针

内存池为boost自带的 #include <boost/pool/pool.hpp> 或者另外一个开源的库: nedmalloc 一个高效率的库 线程池需要下载另外一个开源库 http://www.cnblogs.com/TianFang/archive/2007/08/23/867350.html #include <boost/thread/thread.hpp> http://blog.csdn.net/lilypp/article/details/6605246

ThreadPool 线程池(转)

相关概念: 线程池可以看做容纳线程的容器: 一个应用程序最多只能有一个线程池: ThreadPool静态类通过QueueUserWorkItem()方法将工作函数排入线程池: 每排入一个工作函数,就相当于请求创建一个线程: 线程池的作用: 线程池是为突然大量爆发的线程设计的,通过有限的几个固定线程为大量的操作服务,减少了创建和销毁线程所需的时间,从而提高效率. 如果一个线程的时间非常长,就没必要用线程池了(不是不能作长时间操作,而是不宜.),况且我们还不能控制线程池中线程的开始.挂起.和中止.

ThreadPool 线程池的作用

相关概念: 线程池可以看做容纳线程的容器: 一个应用程序最多只能有一个线程池: ThreadPool静态类通过QueueUserWorkItem()方法将工作函数排入线程池: 每排入一个工作函数,就相当于请求创建一个线程: 线程池的作用: 线程池是为突然大量爆发的线程设计的,通过有限的几个固定线程为大量的操作服务,减少了创建和销毁线程所需的时间,从而提高效率. 如果一个线程的时间非常长,就没必要用线程池了(不是不能作长时间操作,而是不宜.),况且我们还不能控制线程池中线程的开始.挂起.和中止.