C++线程池
回答
我认为它仍然没有被接受进入Boost,但一个好的起点: threadpool。使用的一些示例,从网站:
#include "threadpool.hpp"
using namespace boost::threadpool;
// Some example tasks
void first_task()
{
...
}
void second_task()
{
...
}
void third_task()
{
...
}
void execute_with_threadpool()
{
// Create a thread pool.
pool tp(2);
// Add some tasks to the pool.
tp.schedule(&first_task);
tp.schedule(&second_task);
tp.schedule(&third_task);
// Leave this function and wait until all tasks are finished.
}
池的参数“2”表示线程的数量。在这种情况下,销毁tp
等待所有线程完成。
语句'pool tp(2);'中'2'的含义是什么? – Arun 2010-10-21 17:52:57
@ArunSaha:表示初始线程的数量。我会将其添加到答案中。 – 2010-10-21 18:53:59
这个线程池库项目可能会给出一些想法。 - > https://code.google.com/p/threadpool11/ – Etherealone 2013-05-03 10:28:47
你可能想看看http://threadpool.sourceforge.net/
不难实现自己使用Boost.Threadthread pool。根据任务的不同,您可能希望为队列使用lock-free容器,而不是Standard Template Library中的一个。例如,fifo
容器来自lock free
库。
祝你好运!
This library建立在Boost.Thread上。有一些short tutorial与一些示例代码。如果这不符合你的要求,你可以用它作为基准。
如果你走这条路线,确保你的Boost版本> = 1.37。
我相信你可以在boost :: asio中模拟一个带有io_service的线程池。您可以控制可用于io_service池的线程数,然后您可以将任务“发布”到io_service,这将由池中的一个线程执行。每个这样的任务必须是一个仿函数(我相信)。
现在我不能在这里举一个例子,但iio_service池上的asio文档将概述如何完成此操作。
我写了一个小例子here。基本上你需要做的是落实这段代码:
asio::io_service io_service;
boost::thread_group threads;
auto_ptr<asio::io_service::work> work(new asio::io_service::work(io_service));
// Spawn enough worker threads
int cores_number = boost::thread::hardware_concurrency();
for (std::size_t i = 0; i < cores_number; ++i){
threads.create_thread(boost::bind(&asio::io_service::run, &io_service));
}
// Post the tasks to the io_service
for(vector<string>::iterator it=tasks.begin();it!=tasks.end();it++){
io_service.dispatch(/* YOUR operator()() here */);
}
work.reset();
下面是一个使用线程池的简单只有头任务队列(内置升压):taskqueue.hpp
的TaskQueue project page包括样本应用程序演示how to use it:
- 1. C#线程池HttpWebRequests
- 2. C#和线程池
- 3. 线程池在C#
- 4. C++:线程池比单线程慢吗?
- 5. C#,IAsyncResult和线程池
- 6. C++ 11动态线程池
- 7. 调试线程池在C#
- 8. 线程没有垃圾收集/线程池线程/ C#/ .net
- 9. 线程池中的线程
- 10. 线程池最大线程
- 11. boost线程池
- 12. Servlet线程池
- 13. Windows线程池
- 14. 线程池:DispatchQueue.main.async
- 15. WinAPI线程池
- 16. Silverlight线程池
- 17. Python线程池
- 18. 线程池stucks
- 19. PHP线程池?
- 20. PHP线程池
- 21. QThread线程池
- 22. Java线程池
- 23. 在``C``线程池中运行'POSIX`线程在``C``线程池中运行`函数指针`
- 24. 多线程 - 新线程vs线程池
- 25. 自定义线程池C#问题
- 26. 沉睡在C#线程池中
- 27. C++中的线程池设计
- 28. 从线程池c更新进度条#
- 29. 线程池实现问题(C#3.0)
- 30. 在c中创建线程池#
增强的问题是什么? – 2010-10-21 13:55:40
@David - Boost中没有内置线程池,有吗? – 2010-10-21 13:58:22
@Steve Townsend:对,对不起......我以为我记得有一个提升,但它并没有包括在内(尚未被接受)。在http://threadpool.sourceforge.net/index.html – 2010-10-21 14:17:01