Thread System 0.3.1
High-performance C++20 thread pool with work stealing and DAG scheduling
Loading...
Searching...
No Matches
dag_config.h
Go to the documentation of this file.
1// BSD 3-Clause License
2// Copyright (c) 2024, 🍀☀🌕🌥 🌊
3// See the LICENSE file in the project root for full license information.
4
12#pragma once
13
28#include "dag_job.h"
29
30#include <chrono>
31#include <cstddef>
32#include <functional>
33#include <string>
34
35namespace kcenon::thread
36{
42 {
43 fail_fast,
45 retry,
47 };
48
54 [[nodiscard]] inline auto dag_failure_policy_to_string(dag_failure_policy policy) -> std::string
55 {
56 switch (policy)
57 {
58 case dag_failure_policy::fail_fast: return "fail_fast";
59 case dag_failure_policy::continue_others: return "continue_others";
60 case dag_failure_policy::retry: return "retry";
61 case dag_failure_policy::fallback: return "fallback";
62 default: return "unknown";
63 }
64 }
65
73 {
83
90 std::size_t max_retries{0};
91
97 std::chrono::milliseconds retry_delay{1000};
98
105 bool detect_cycles{true};
106
114
124
132 std::function<void(job_id, const std::string&)> error_callback;
133
140 std::function<void(job_id)> completion_callback;
141 };
142
148 {
149 std::size_t total_jobs{0};
150 std::size_t completed_jobs{0};
151 std::size_t failed_jobs{0};
152 std::size_t pending_jobs{0};
153 std::size_t running_jobs{0};
154 std::size_t skipped_jobs{0};
155 std::size_t cancelled_jobs{0};
156
157 std::chrono::milliseconds total_execution_time{0};
158 std::chrono::milliseconds critical_path_time{0};
160
165 [[nodiscard]] auto is_complete() const -> bool
166 {
167 return pending_jobs == 0 && running_jobs == 0;
168 }
169
174 [[nodiscard]] auto all_succeeded() const -> bool
175 {
176 return is_complete() && failed_jobs == 0 && cancelled_jobs == 0;
177 }
178
183 [[nodiscard]] auto success_rate() const -> double
184 {
185 if (total_jobs == 0) return 0.0;
186 return static_cast<double>(completed_jobs) / static_cast<double>(total_jobs);
187 }
188 };
189
190} // namespace kcenon::thread
DAG-aware job with dependency tracking and unique identifiers.
Core threading foundation of the thread system library.
Definition thread_impl.h:17
auto dag_failure_policy_to_string(dag_failure_policy policy) -> std::string
Convert dag_failure_policy to string representation.
Definition dag_config.h:54
dag_job_state
State of a job in the DAG scheduler.
Definition dag_job.h:45
std::uint64_t job_id
Unique job identifier for DAG scheduler.
Definition dag_job.h:33
dag_failure_policy
Defines how the DAG scheduler handles job failures.
Definition dag_config.h:42
@ retry
Retry failed job (with max retries)
@ fallback
Execute fallback job if available.
@ continue_others
Continue unrelated jobs, skip dependents.
@ fail_fast
Cancel all dependents immediately on failure.
Configuration options for the DAG scheduler.
Definition dag_config.h:73
bool detect_cycles
Whether to detect and reject cycles.
Definition dag_config.h:105
std::function< void(job_id, dag_job_state, dag_job_state)> state_callback
Callback for state changes.
Definition dag_config.h:123
std::size_t max_retries
Maximum number of retry attempts for failed jobs.
Definition dag_config.h:90
std::function< void(job_id)> completion_callback
Callback for job completion.
Definition dag_config.h:140
bool execute_in_parallel
Whether to execute ready jobs in parallel.
Definition dag_config.h:113
dag_failure_policy failure_policy
How to handle job failures.
Definition dag_config.h:82
std::function< void(job_id, const std::string &)> error_callback
Callback for job errors.
Definition dag_config.h:132
std::chrono::milliseconds retry_delay
Delay between retry attempts.
Definition dag_config.h:97
Statistics about DAG execution.
Definition dag_config.h:148
auto success_rate() const -> double
Calculate success rate.
Definition dag_config.h:183
std::chrono::milliseconds critical_path_time
Time of longest path.
Definition dag_config.h:158
std::chrono::milliseconds total_execution_time
Total wall-clock time.
Definition dag_config.h:157
std::size_t pending_jobs
Number of pending jobs.
Definition dag_config.h:152
std::size_t cancelled_jobs
Number of cancelled jobs.
Definition dag_config.h:155
std::size_t total_jobs
Total number of jobs in DAG.
Definition dag_config.h:149
auto all_succeeded() const -> bool
Check if all jobs succeeded.
Definition dag_config.h:174
std::size_t skipped_jobs
Number of skipped jobs.
Definition dag_config.h:154
double parallelism_efficiency
Actual vs theoretical speedup.
Definition dag_config.h:159
std::size_t failed_jobs
Number of failed jobs.
Definition dag_config.h:151
auto is_complete() const -> bool
Check if all jobs are complete (success or failure)
Definition dag_config.h:165
std::size_t running_jobs
Number of currently running jobs.
Definition dag_config.h:153
std::size_t completed_jobs
Number of successfully completed jobs.
Definition dag_config.h:150