Thread System 0.3.1
High-performance C++20 thread pool with work stealing and DAG scheduling
Loading...
Searching...
No Matches
config_example.cpp
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
19#include <iostream>
20
21namespace
22{
28 void example_default_config()
29 {
30 std::cout << "\n=== Example 1: Default Configuration ===\n";
31
33
34 std::cout << "Worker count: " << config.pool.worker_count << "\n";
35 std::cout << "Queue capacity: " << config.pool.queue_capacity << "\n";
36 std::cout << "Backpressure policy: "
38 << "\n";
39 }
40
46 void example_builder_basic()
47 {
48 std::cout << "\n=== Example 2: Builder Pattern (Basic) ===\n";
49
51 .with_worker_count(8)
52 .with_queue_capacity(5000)
53 .build();
54
55 std::cout << "Worker count: " << config.pool.worker_count << "\n";
56 std::cout << "Queue capacity: " << config.pool.queue_capacity << "\n";
57 std::cout << "Configuration is valid: " << (config.is_valid() ? "yes" : "no") << "\n";
58 }
59
65 void example_backpressure_config()
66 {
67 std::cout << "\n=== Example 3: Backpressure Configuration ===\n";
68
70 .with_worker_count(4)
71 .with_queue_capacity(1000)
72 .enable_backpressure()
73 .with_backpressure_policy(kcenon::thread::backpressure_policy::adaptive)
74 .with_watermarks(0.5, 0.8)
75 .build();
76
77 std::cout << "Backpressure enabled: yes\n";
78 std::cout << "Policy: "
79 << kcenon::thread::backpressure_policy_to_string(config.pool.backpressure.policy)
80 << "\n";
81 std::cout << "Low watermark: " << config.pool.backpressure.low_watermark << "\n";
82 std::cout << "High watermark: " << config.pool.backpressure.high_watermark << "\n";
83 }
84
90 void example_circuit_breaker_config()
91 {
92 std::cout << "\n=== Example 4: Circuit Breaker Configuration ===\n";
93
95 .with_worker_count(4)
96 .enable_circuit_breaker()
97 .with_failure_threshold(5)
98 .with_open_duration(std::chrono::seconds{30})
99 .build();
100
101 std::cout << "Circuit breaker enabled: yes\n";
102 std::cout << "Failure threshold: "
103 << config.resilience.circuit_breaker.failure_threshold << "\n";
104 std::cout << "Open duration: "
105 << config.resilience.circuit_breaker.timeout.count() << "s\n";
106 std::cout << "Half-open max requests: "
107 << config.resilience.circuit_breaker.half_open_max_requests << "\n";
108 }
109
115 void example_work_stealing_config()
116 {
117 std::cout << "\n=== Example 5: Work Stealing Configuration ===\n";
118
120 .with_worker_count(8)
121 .enable_work_stealing()
122 .with_work_stealing_params(3, std::chrono::microseconds{50})
123 .build();
124
125 std::cout << "Work stealing enabled: " << (config.pool.enable_work_stealing ? "yes" : "no")
126 << "\n";
127 std::cout << "Max steal attempts: " << config.pool.max_steal_attempts << "\n";
128 std::cout << "Steal backoff: " << config.pool.steal_backoff.count() << "Ξs\n";
129 }
130
136 void example_priority_aging_config()
137 {
138 std::cout << "\n=== Example 6: Priority Aging Configuration ===\n";
139
141 .with_worker_count(4)
142 .enable_priority_aging()
143 .with_priority_aging_params(std::chrono::seconds{1}, 1, 3)
144 .build();
145
146 std::cout << "Priority aging enabled: "
147 << (config.scaling.priority_aging.enabled ? "yes" : "no") << "\n";
148 std::cout << "Aging interval: " << config.scaling.priority_aging.aging_interval.count()
149 << "ms\n";
150 std::cout << "Boost per interval: "
151 << config.scaling.priority_aging.priority_boost_per_interval << "\n";
152 std::cout << "Max boost: " << config.scaling.priority_aging.max_priority_boost << "\n";
153 }
154
160 void example_dag_config()
161 {
162 std::cout << "\n=== Example 7: DAG Configuration ===\n";
163
165 .with_worker_count(4)
166 .with_dag_failure_policy(kcenon::thread::dag_failure_policy::retry)
167 .with_dag_retry_params(3, std::chrono::milliseconds{1000})
168 .build();
169
170 std::cout << "DAG failure policy: "
171 << kcenon::thread::dag_failure_policy_to_string(config.dag.failure_policy)
172 << "\n";
173 std::cout << "Max retries: " << config.dag.max_retries << "\n";
174 std::cout << "Retry delay: " << config.dag.retry_delay.count() << "ms\n";
175 std::cout << "Detect cycles: " << (config.dag.detect_cycles ? "yes" : "no") << "\n";
176 std::cout << "Execute in parallel: " << (config.dag.execute_in_parallel ? "yes" : "no")
177 << "\n";
178 }
179
185 void example_production_config()
186 {
187 std::cout << "\n=== Example 8: Production Configuration ===\n";
188
190 .with_worker_count(std::thread::hardware_concurrency())
191 .with_queue_capacity(10000)
192 .enable_backpressure()
193 .with_backpressure_policy(kcenon::thread::backpressure_policy::adaptive)
194 .with_watermarks(0.6, 0.85)
195 .enable_circuit_breaker()
196 .with_failure_threshold(10)
197 .with_open_duration(std::chrono::seconds{60})
199 .with_work_stealing_params(5, std::chrono::microseconds{100})
200 .enable_priority_aging()
201 .with_priority_aging_params(std::chrono::seconds{2}, 1, 5)
203 .build();
204
205 std::cout << "Worker count: " << config.pool.worker_count << "\n";
206 std::cout << "Queue capacity: " << config.pool.queue_capacity << "\n";
207 std::cout << "Backpressure: adaptive (low=" << config.pool.backpressure.low_watermark
208 << ", high=" << config.pool.backpressure.high_watermark << ")\n";
209 std::cout << "Circuit breaker: threshold=" << config.resilience.circuit_breaker.failure_threshold
210 << ", open_duration=" << config.resilience.circuit_breaker.timeout.count()
211 << "s\n";
212 std::cout << "Work stealing: enabled, max_attempts=" << config.pool.max_steal_attempts
213 << "\n";
214 std::cout << "Priority aging: enabled, interval="
215 << config.scaling.priority_aging.aging_interval.count() << "ms\n";
216 std::cout << "DAG failure policy: "
217 << kcenon::thread::dag_failure_policy_to_string(config.dag.failure_policy)
218 << "\n";
219 std::cout << "Configuration is valid: " << (config.is_valid() ? "yes" : "no") << "\n";
220 }
221
227 void example_direct_initialization()
228 {
229 std::cout << "\n=== Example 9: Direct Initialization ===\n";
230
232 config.pool.worker_count = 6;
233 config.pool.queue_capacity = 2000;
235 config.resilience.circuit_breaker.failure_threshold = 3;
236 config.scaling.priority_aging.enabled = true;
237
238 std::cout << "Worker count: " << config.pool.worker_count << "\n";
239 std::cout << "Queue capacity: " << config.pool.queue_capacity << "\n";
240 std::cout << "Backpressure policy: "
242 << "\n";
243 std::cout << "Circuit breaker threshold: "
244 << config.resilience.circuit_breaker.failure_threshold << "\n";
245 std::cout << "Priority aging enabled: "
246 << (config.scaling.priority_aging.enabled ? "yes" : "no") << "\n";
247 }
248} // namespace
249
250int main()
251{
252 std::cout << "========================================\n";
253 std::cout << "Thread System Configuration Examples\n";
254 std::cout << "========================================\n";
255
256 example_default_config();
257 example_builder_basic();
258 example_backpressure_config();
259 example_circuit_breaker_config();
260 example_work_stealing_config();
261 example_priority_aging_config();
262 example_dag_config();
263 example_production_config();
264 example_direct_initialization();
265
266 std::cout << "\n========================================\n";
267 std::cout << "All examples completed successfully!\n";
268 std::cout << "========================================\n";
269
270 return 0;
271}
@ adaptive
Automatically adjust based on load conditions.
@ drop_oldest
Drop the oldest job when full to make room.
constexpr bool enable_work_stealing
Definition config.h:36
auto dag_failure_policy_to_string(dag_failure_policy policy) -> std::string
Convert dag_failure_policy to string representation.
Definition dag_config.h:54
auto backpressure_policy_to_string(backpressure_policy policy) -> std::string
Converts backpressure_policy to human-readable string.
@ retry
Retry failed job (with max retries)
@ continue_others
Continue unrelated jobs, skip dependents.
backpressure_policy policy
The backpressure policy to use.
bool enabled
Whether priority aging is enabled.
std::size_t worker_count
Number of worker threads in the pool.
backpressure_config backpressure
Backpressure configuration.
std::size_t queue_capacity
Maximum number of jobs in the queue.
circuit_breaker_config circuit_breaker
Circuit breaker configuration.
priority_aging_config priority_aging
Priority aging configuration.
Unified configuration for thread_system.
struct kcenon::thread::thread_system_config::scaling_config scaling
static auto builder() -> config_builder
Creates a builder for fluent configuration.
struct kcenon::thread::thread_system_config::resilience_config resilience
struct kcenon::thread::thread_system_config::pool_config pool
Public facade for thread_system configuration.