Poco::ThreadPool
2013-12-29 22:57
344 查看
Poco::ThreadPool提供线程池功能,减少线程的创建和销毁所带来的开销,适合在服务器上应用。创建线程池时指定最少运行线程数和线程池的最大容量,若不指定则采用默认值,取2和16 。线程池的实现机制:有一部分线程始终处于运行状态,但阻塞在Event的wait调用上,所以处于休眠状态,开销并不大。如果我们需要一个线程来运行一段代码(在Poco中,用Runnable的子类表示一个target),则从线程池中去除一个线程,并将这段代码赋给它,并触发Event。然后线程就继续运行了。
活动图
view plaincopyprint?
void ThreadPoolTest::testThreadPool()
{
ThreadPool pool(2, 3, 3);
assert (pool.allocated() == 2);
assert (pool.used() == 0);
assert (pool.capacity() == 3);
assert (pool.available() == 3);
pool.addCapacity(1);
assert (pool.allocated() == 2);
assert (pool.used() == 0);
assert (pool.capacity() == 4);
assert (pool.available() == 4);
RunnableAdapter<ThreadPoolTest> ra(*this, &ThreadPoolTest::hello);
pool.start(ra);
assert (pool.allocated() == 2);
assert (pool.used() == 1);
assert (pool.capacity() == 4);
assert (pool.available() == 3);
pool.start(ra);
assert (pool.allocated() == 2);
assert (pool.used() == 2);
assert (pool.capacity() == 4);
assert (pool.available() == 2);
pool.start(ra);
assert (pool.allocated() == 3);
assert (pool.used() == 3);
assert (pool.capacity() == 4);
assert (pool.available() == 1);
pool.start(ra);
assert (pool.allocated() == 4);
assert (pool.used() == 4);
assert (pool.capacity() == 4);
assert (pool.available() == 0);
}
线程池的内存策略有点像MemoryPool,请参加/article/1355316.html
活动图
demo
[cpp]view plaincopyprint?
void ThreadPoolTest::testThreadPool()
{
ThreadPool pool(2, 3, 3);
assert (pool.allocated() == 2);
assert (pool.used() == 0);
assert (pool.capacity() == 3);
assert (pool.available() == 3);
pool.addCapacity(1);
assert (pool.allocated() == 2);
assert (pool.used() == 0);
assert (pool.capacity() == 4);
assert (pool.available() == 4);
RunnableAdapter<ThreadPoolTest> ra(*this, &ThreadPoolTest::hello);
pool.start(ra);
assert (pool.allocated() == 2);
assert (pool.used() == 1);
assert (pool.capacity() == 4);
assert (pool.available() == 3);
pool.start(ra);
assert (pool.allocated() == 2);
assert (pool.used() == 2);
assert (pool.capacity() == 4);
assert (pool.available() == 2);
pool.start(ra);
assert (pool.allocated() == 3);
assert (pool.used() == 3);
assert (pool.capacity() == 4);
assert (pool.available() == 1);
pool.start(ra);
assert (pool.allocated() == 4);
assert (pool.used() == 4);
assert (pool.capacity() == 4);
assert (pool.available() == 0);
}
void ThreadPoolTest::testThreadPool() { ThreadPool pool(2, 3, 3); assert (pool.allocated() == 2); assert (pool.used() == 0); assert (pool.capacity() == 3); assert (pool.available() == 3); pool.addCapacity(1); assert (pool.allocated() == 2); assert (pool.used() == 0); assert (pool.capacity() == 4); assert (pool.available() == 4); RunnableAdapter<ThreadPoolTest> ra(*this, &ThreadPoolTest::hello); pool.start(ra); assert (pool.allocated() == 2); assert (pool.used() == 1); assert (pool.capacity() == 4); assert (pool.available() == 3); pool.start(ra); assert (pool.allocated() == 2); assert (pool.used() == 2); assert (pool.capacity() == 4); assert (pool.available() == 2); pool.start(ra); assert (pool.allocated() == 3); assert (pool.used() == 3); assert (pool.capacity() == 4); assert (pool.available() == 1); pool.start(ra); assert (pool.allocated() == 4); assert (pool.used() == 4); assert (pool.capacity() == 4); assert (pool.available() == 0); }
线程池的内存策略有点像MemoryPool,请参加/article/1355316.html
相关文章推荐
- Windows服务编程Demo
- Common Lisp学习之十:输出格式化控制与高级循环控制
- 插入排序之希尔排序(Shell Sort)
- 微信公众帐号开发教程第16篇-应用实例之历史上的今天
- Poco::Thread
- HBase 启动错误,HBase管理zookeeper ,无法定位登录配置
- IOS bounds与Frame
- linux 2.6x内核升级
- ZOJ 3738 —— Buy the Pets(状态压缩DP)
- POCO库 Foundation::Thread模块 多线程与线程池支持
- 根据PID获取进程名&根据进程名获取PID
- Linux 鸟哥私房菜 http://vbird.dic.ksu.edu.tw/
- ubuntu下配置apache james遇到java.net.BindException: 权限不够
- 乐观锁和悲观锁
- 黑马程序员—高新技术:Reflect反射
- 生活要有激情
- 微信公众帐号开发教程第15篇-自定义菜单的view类型(访问网页)
- Poco C++库
- 黑马程序员 IO流 一
- jquery ajax return值不能取得的解决方案