`

Poco::ThreadPool

阅读更多

Poco::ThreadPool提供线程池功能,减少线程的创建和销毁所带来的开销,适合在服务器上应用。创建线程池时指定最少运行线程数和线程池的最大容量,若不指定则采用默认值,取2和16 。线程池的实现机制:有一部分线程始终处于运行状态,但阻塞在Event的wait调用上,所以处于休眠状态,开销并不大。如果我们需要一个线程来运行一段代码(在Poco中,用Runnable的子类表示一个target),则从线程池中去除一个线程,并将这段代码赋给它,并触发Event。然后线程就继续运行了。

活动图


demo

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,请参加 http://blog.csdn.net/fym0121/article/details/7840801
更多详细信息请查看java教程网 http://www.itchm.com/forum-59-1.html
分享到:
评论

相关推荐

    Poco:TCPServer框架

    6. **线程池管理**: Poco库中的`ThreadPool`类用于管理线程,确保服务端有足够的资源处理客户端连接。 **使用示例** 创建一个简单的TCP服务器,你需要定义一个`TCPServerConnectionFactory`的实现,然后在`...

    线程池实现源码

    在VS2008中使用POCO线程池,首先需要包含相应的头文件,例如`Poco/ThreadPool.h`。然后,可以使用`Poco::ThreadPool`类来管理线程池。这个类提供了如下的方法: 1. `add()`:添加一个新的任务到线程池,通常会传入...

    ThreadPool:使用std的C ++线程池

    args) 这是将作业添加到ThreadPool 。 接受要排队的可调用对象( func )以及参数( args... )。 返回模板Func的返回类型的std::future ,以获取返回值。 完整签名: template &lt; typename&gt; auto add (Func&& func,...

    ThreadPool_Cpp:ThreadPool:C ++ 17,仅标头,std :: future

    线程池 ... ThreadPool&lt; 5&gt; threadPool; // Pass With Thread Pool Size(Worker Count) int a = 5 ; // Push Tasks std::future&lt; int&gt; future1 = threadPool. AddTask (Function1, std::ref (a));

    ThreadPool:一个简单的C ++线程池实现

    这是C ++中的简单ThreadPool实现。 此实现提供以下功能: 每个池实例的可配置线程数。 动态线程数修改SetThreadCount(size_t) 两种ThreadPool停止模式:同步和异步 main.cpp提供了使用此ThreadPool的示例代码。 ...

    rust-threadpool:一个非常简单的线程池,用于并行任务执行

    let pool = threadpool::ThreadPool::new(4); // 创建一个包含4个工作线程的线程池 } ``` 2. **提交任务**:创建线程池后,你可以使用 `execute` 方法提交闭包(`move || {...}`)作为任务。闭包将在线程池中的...

    Boost threadpool优先级实例

    2. **创建线程池**:然后,我们可以创建一个线程池对象,比如`boost::threadpool::pool pool(num_threads)`,其中`num_threads`是线程池中线程的数量。 3. **定义任务**:任务可以是任何可调用的对象,如函数、函数...

    ThreadPool:Linux中的ThreadPool

    在Linux操作系统中,线程池(ThreadPool)是一种有效的资源管理策略,它允许程序预先创建一组线程,并在需要时重复利用这些线程来执行任务,而不是每次需要时都创建新的线程。线程池可以提高系统的效率,减少线程...

    ThreadPool:用C ++ 11和Folly实现的简单线程池(facebook C ++基础库)

    线程池是一种多线程处理形式,通过预先创建一定数量的工作线程,处理来自请求队列的任务,从而避免频繁地创建和销毁线程所带来的性能开销。在C++11中,标准库提供了`std::thread`来支持线程编程,但并未提供线程池的...

    lua-threadpool:更快、更简单、更强大的lua协程库

    local threadpool = require ' threadpool_ext ' threadpool. init ({ logger = { warn = print, error = print, debug = print }, growing_thread_num = 10 , time_service = epoll, }) local env_seq = ...

    threadpool11:快速,无锁,跨平台的C ++ 11线程池库,旨在实现轻量级且简单

    与OpenMP相比,threadpool11的性能 这是在树中找到OpenMP演示的结果。 您机器的硬件并发度是8 threadpool11执行花费了22704毫秒。 threadpool11(没有将来)的执行花费了21198毫秒。 openmp执行花费了21663毫秒...

    基于C++11的线程池

    &gt; threadpool::get(TaskFuncPtr& task);读取任务队列中的任务 &gt; threadpool::run();通过get()读取任务并执行 &gt; threadpool.start(); 启动线程池,并通过run()执行任务 &gt; threadpool.exec();封装任务到任务队列中 ...

    threadpool

    线程池(threadpool)是计算机程序中一种有效的多线程处理形式,它预先创建一组线程,待有任务需要执行时,从线程池中取出一个线程来执行任务,任务完成后,线程并不销毁,而是返回线程池等待下一次的任务分配。...

    python threadpool

    Python中的`threadpool`库是实现多线程处理任务的一种工具,它提供了一种方便的方式来组织和管理线程池,从而高效地并发执行大量任务。`threadpool`库并不是Python标准库的一部分,而是由第三方开发者提供的扩展。在...

    threadpool.tar.gz

    在"threadpool.tar.gz"压缩包中,包含两个文件:threadpool.cc和threadpool.h,它们很可能是实现线程池的源代码文件。这里我们将详细讨论C++11引入的线程库以及如何在Linux/MacOS平台上利用这些新特性构建线程池。 ...

    utility-ThreadPool-ios:自1.2版以来,Lightstreamer的iOS客户端库使用的线程池和URL调度库

    适用于iOS的线程池库 自1.2版以来,Lightstreamer的iOS客户端库使用的线程池和URL调度库。 这个库做什么 这段代码最初是在2012年编写的,旨在解决iOS SDK和运行时的特定问题: iOS上的NSURLConnection到同一端点的...

    boost threadpool(修复内存泄露后的版本)

    例如,`boost::threadpool::pool`是线程池的主要类,它提供了添加任务、启动线程池、停止线程池等方法。`pool::schedule`用于向线程池提交任务,而`pool::wait`则让主线程等待所有任务完成。 在修复内存泄漏的问题...

    Thread线程和ThreadPool线程池 Thread:我们可以开启一个线程

    Thread线程和ThreadPool线程池 Thread:我们可以开启一个线程。但是请大家记住:线程开启会在空间和时间上...ThreadPool:会根据你的CPU的核心数开启一个最合适的线程数量。如果你操作中,非常耗时,就不要用线程池。

    QT_ThreadPool.rar

    在实际使用中,开发者可以通过调用线程池提供的API来提交任务,例如`ThreadPool::addTask(TaskPtr task)`。任务会被添加到队列中,然后由线程池自动分配给空闲的工作线程。任务完成后,线程池会通知提交任务的对象...

Global site tag (gtag.js) - Google Analytics