Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/Fdhvdu/ThreadPool
A fastest, exception-safety and pure C++17 thread pool.
https://github.com/Fdhvdu/ThreadPool
c-plus-plus-17 fastest performance-comparison thread-pool
Last synced: 28 days ago
JSON representation
A fastest, exception-safety and pure C++17 thread pool.
- Host: GitHub
- URL: https://github.com/Fdhvdu/ThreadPool
- Owner: Fdhvdu
- License: mit
- Created: 2015-12-01T03:17:24.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2019-07-29T14:37:57.000Z (over 5 years ago)
- Last Synced: 2024-08-04T02:09:13.828Z (4 months ago)
- Topics: c-plus-plus-17, fastest, performance-comparison, thread-pool
- Language: C++
- Homepage:
- Size: 276 KB
- Stars: 130
- Watchers: 6
- Forks: 22
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- AwesomeCppGameDev - ThreadPool - safety and pure C++17 thread pool. (C++)
README
# Warnings
Since commit `468129863ec65c0b4ede02e8581bea682351a6d2`, I move ThreadPool to C++17. (To use `std::apply`.)
In addition, **the rule of passing parameters to ThreadPool is different.**
Unlike before, which uses `std::bind`, **ThreadPool will not copy anything right now.**
All of ThreadPool does is forward (**no decay**).
This means you have to copy arguments by yourself before passing it to ThreadPool.
Below is demonstration,void test(int &i)
{
i=10;
}int main()
{
int i(0);
CThreadPool tp;
tp.join(tp.add(test,i));//before commit f66048ed999aa1b50dc956c4a728ff565042d761
cout<
[Class view](https://github.com/Fdhvdu/ThreadPool/blob/master/README.md#class-view)
[Performance comparison](https://github.com/Fdhvdu/ThreadPool/blob/master/README.md#performance-comparison)
[Compiler](https://github.com/Fdhvdu/ThreadPool/blob/master/README.md#compiler)
[How to compile](https://github.com/Fdhvdu/ThreadPool/blob/master/README.md#how-to-compile)
[Compilation errors?](https://github.com/Fdhvdu/ThreadPool/blob/master/README.md#compilation-errors)
[Tutorial](https://github.com/Fdhvdu/ThreadPool/blob/master/README.md#tutorial)
[Future work](https://github.com/Fdhvdu/ThreadPool/blob/master/README.md#future-work)
# Introduction
This is a pure (which means it doesn't depend on any platform) and exception-safety C++ threadpool (so far, there is no standard threadpool in C++).
The goal of this project is to provide a `fastest`, `beautiful` and `easy-to-use` C++ threadpool library.
# Class view
Two classesCThreadPool, including the member function
thread_id add(Func &&,Args &&...)
void add_and_detach(Func &&,Args &&...)
size_type empty() const noexcept
void join(thread_id)
void join_all()
bool joinable(thread_id) const
size_type size() const noexcept
void wait_until_all_usable() const
CThreadPool_Ret, including the member function
thread_id add(Func &&,Args &&...)
size_type empty() const noexcept
Ret get(thread_id)
size_type size() const noexcept
bool valid(thread_id) const
void wait(thread_id) const
void wait_all() const
Use the CThreadPool_Ret when you want to get the return value of function.
Use the CThreadPool when you don't care the return value of function.
`CThreadPool::add_and_detach` is faster (very) than `CThreadPool_Ret::add`.
# Performance comparison
[progschj/ThreadPool](https://github.com/progschj/ThreadPool), see [Comparison](comparison/README.md#result).
[Tyler-Hardin/thread_pool](https://github.com/Tyler-Hardin/thread_pool), see [Comparison](comparison/README.md#result).
P.S. About [bilash/threadpool](https://github.com/bilash/threadpool), I don't want to test a C-like code.
P.S. [nbsdx/ThreadPool](https://github.com/nbsdx/ThreadPool) cannot pass testing, see [README](comparison/nbsdx/README.md#warning).
P.S. [philipphenkel/threadpool](https://github.com/philipphenkel/threadpool) cannot pass testing, see [README](comparison/philipphenkel/README.md#warning).
P.S. [tghosgor/threadpool11](https://github.com/tghosgor/threadpool11) cannot pass testing, see [README](comparison/tghosgor/README.md#warning).
P.S. [mtrebi/thread-pool](https://github.com/mtrebi/thread-pool) cannot pass testing, see [README](comparison/mtrebi/README.md#warning).
See the [directory](comparison/) for more details.
# Compiler
Visual Studio 2017 15.5.5
g++ 7.2.1
clang++ 5.0.1
# How to compile
You have to download [my lib](https://github.com/Fdhvdu/lib) first.
The directory should be look like├── lib
│ ├── header
│ ├── LICENSE
│ ├── README.md
│ ├── src
│ └── tutorial
└── ThreadPool
├── comparison
├── header
├── LICENSE
├── README.md
├── src
└── tutorial
Don't forget to compile lib/src/Scope_guard.cpp.
# Compilation errors?
See [How to compile](https://github.com/Fdhvdu/ThreadPool/blob/master/README.md#how-to-compile) or email me
# Tutorial
I provide [example.cpp](tutorial/example.cpp) and [example_ret.cpp](tutorial/example_ret.cpp) to help you understand how to use this powerful thread pool
To use [example.cpp](tutorial/example.cpp):g++ -std=c++17 tutorial/example.cpp src/* ../lib/src/Scope_guard.cpp
To use [example_ret.cpp](tutorial/example_ret.cpp):g++ -std=c++17 tutorial/example_ret.cpp src/IThreadPoolItemBase.cpp ../lib/src/Scope_guard.cpp
# Future work
add a non-block version of `CThreadPool::add`
work stealing