Nearly all morden frameworks provide built-in thread pool implementation. However C++ does't. Here's a list of implementations of thread pool in C++.

Threadpool
http://threadpool.sourceforge.net
threadpool is a cross-platform C++ thread pool library based on Boost. The threadpool library provides a convenient way for dispatching asynchronous tasks. Pools can be customized, managed dynamically and easily integrated into your software. The library is used by several commercial server applicaions and an handle high work load without problems.

Sample code:

#include "threadpool.hpp"
using namespace boost::threadpool;

void normal_task();
void important_task();

void execute_prioritized()
{
  // Create prioritized thread pool container without any threads.
  scoped_pool<prio_pool, 0> tp;

  // Add some tasks to the pool.
  tp += prio_task_func(5,   &normal_task);
  tp += prio_task_func(100, &important_task);
  tp += prio_task_func(7,   &normal_task);

  // Add the some threads to the pool. This will start the execution of the tasks.
  tp->resize(2);

  // The tasks are processed according to their priority:
  // important_task(100), nonrelevant_task(7), nonrelevant_task(5).

  tp->wait();
  // Now all tasks are finished and the pool will be destroyed safely when tp goes out of scope.
}

ThreadPool
http://www.hlnum.org/english/projects/tools/threadpool/index.html
Quite simple implementation based on lib_pthread. You can base your code on it and it's very likely some further modification is required. As is introduced in its homepage, it's:

"An implementation of a thread-pool based on POSIX-threads. It builds a pool of p threads which are blocked until a job was given to the pool. Then an idle thread is chosen and the job is executed at this thread. If no idle thread is available, the pool blocks until one of the running jobs terminates."

ffead-cpp
http://code.google.com/p/ffead-cpp/
It's an ambitious project that aims to bring C++ to the world of web development. As is stated in it's introduction page:

"The framework is developed for rapid development of Enterprise application on the C++ platform. It is a c++ web framework, c++ application framework, c++ rest framework and c++ soap framework all bundled into one. It consists of the following and is currently implemented for LINUX/WINDOWS(Cygwin). It is the first and only C++ Application framework to provide non-intrusive Dependency Injection and Business Driven Component Logic and POCO based Development. Most of the features are controlled by configuration files."

poco c++ libraries
http://pocoproject.org/
Poco is a framework written in modern, standard ansi C++ using C++ standard library. The framework seems perfectly complete(compression, data access, ssl, crypto, xml, threading, ipc - Anything you could think of in application development, it incudes.) It uses Boost license, and seems has lots of users.

Windows API
http://msdn.microsoft.com/en-us/library/windows/desktop/ms686766%28v=vs.85%29.aspx

Supprisingly, Windows provides API for thread-pool management.And they have two sets of them. There was one shipped with Windows XP, and then in Windows Vista they upgrade the API by providing the second set.

libcurl
http://curl.haxx.se/libcurl/c/curl_multi_perform.html

If you are planning to use a thread-pool along with curl. The answer is, you don't need a thread-pool! This function provides all what you need. With asynchronous socket you can handle many connections with one thread, and curl has perfect support for this. It's fast, robust and handy.

Now smile :)
 


Comments

Tolga
07/14/2013 23:54

This FOSS project is my attempt to create a thread pool library, check it out if you want. -> code.google.com/p/threadpool11

Reply
05/16/2014 22:14

Very helpful collection - thank you for taking time and putting up the list here. Good work.

Reply



Leave a Reply