SiddiqSoft.asynchrony
1.7.2
See the version list below for details.
dotnet add package SiddiqSoft.asynchrony --version 1.7.2
NuGet\Install-Package SiddiqSoft.asynchrony -Version 1.7.2
<PackageReference Include="SiddiqSoft.asynchrony" Version="1.7.2" />
paket add SiddiqSoft.asynchrony --version 1.7.2
#r "nuget: SiddiqSoft.asynchrony, 1.7.2"
// Install SiddiqSoft.asynchrony as a Cake Addin #addin nuget:?package=SiddiqSoft.asynchrony&version=1.7.2 // Install SiddiqSoft.asynchrony as a Cake Tool #tool nuget:?package=SiddiqSoft.asynchrony&version=1.7.2
asynchrony : Add asynchrony to your apps
Motivation
- We needed to add asynchrony to our code.
- The code here is a set of helpers that utilize the underlying deque, semaphore, mutex features found in std.
- Be instructive while providing functional code
- Use only C++20 standard code: jthread, deque, semaphore, barriers and latch
- No external dependency
Usage
Requires C++20 support!
Specifically we require
jthread
andstop_token
support which is unfortunately not available in the Apple Clang 16 version. This library works with gcc 14+ or MSVC 17+ or Clang 18+.
Refer to the documentation for details.
The library uses concepts to ensure the type T
meets move construct requirements.
Single threaded worker
#include "siddiqsoft/simple_worker.hpp"
// Define your data
struct MyWork
{
std::string urlDestination{};
std::string data{};
void operator()(){
magic_post_to(urlDestination, data);
}
};
void main()
{
// Declare worker with our data type and the driver function.
siddiqsoft::simple_worker<MyWork> worker{[](auto& item){
// call the item's operator()
// to invoke actual work.
item();
}};
// Fire 100 items
for( int i=0; i < 100; i++ )
{
// Queues into the single worker
worker.queue({std::format("https://localhost:443/test?iter={}",i),
"hello-world"});
}
// As the user, you must control the lifetime of the worker
// Trying to delete the worker will cause it to stop
// and abandon any items in the internal deque.
std::this_thread::sleep_for(1s);
}
Multi-threaded worker pool
#include "siddiqsoft/simple_pool.hpp"
void main()
{
// Declare worker with our data type and the driver function.
siddiqsoft::simple_pool<MyWork> worker{[](auto& item){
// call the item's operator()
// to invoke actual work.
item();
}};
// Fire 100 items
for( int i=0; i < 100; i++ )
{
// Queues into the single queue but multiple worker threads
// (defaults to CPU thread cout)
worker.queue({std::format("https://localhost:443/test?iter={}",i),
"hello-world"});
}
// As the user, you must control the lifetime of the worker
// Trying to delete the worker will cause it to stop
// and abandon any items in the internal deque.
std::this_thread::sleep_for(1s);
}
Multi-threaded roundrobin pool
#include "siddiqsoft/roundrobin_pool.hpp"
void main()
{
// Declare worker with our data type and the driver function.
siddiqsoft::roundrobin_pool<MyWork> worker{[](auto& item){
// call the item's operator()
// to invoke actual work.
item();
}};
// Fire 100 items
for( int i=0; i < 100; i++ )
{
// Queues into the thread pools individual queue by round-robin
// across the threads with simple counter.
// (defaults to CPU thread cout)
worker.queue({std::format("https://localhost:443/test?iter={}",i),
"hello-world"});
}
// As the user, you must control the lifetime of the worker
// Trying to delete the worker will cause it to stop
// and abandon any items in the internal deque.
std::this_thread::sleep_for(1s);
}
Implementation note
In order to use std::jthread
on Clang 18 and Clang 19, we enable the compiler flag "CMAKE_CXX_FLAGS": "-fexperimental-library"
in the CMakeLists.txt. This option will show up in your client library under Clang compilers.
<p align="right"> © 2021 Siddiq Software LLC. All rights reserved. </p>
Product | Versions Compatible and additional computed target framework versions. |
---|---|
native | native is compatible. |
This package has no dependencies.
NuGet packages (1)
Showing the top 1 NuGet packages that depend on SiddiqSoft.asynchrony:
Package | Downloads |
---|---|
SiddiqSoft.restcl
Focussed REST Client for modern C++ |
GitHub repositories
This package is not used by any popular GitHub repositories.