Skip to content

Commit 3e1c1bc

Browse files
committed
refine the example, drop some overhead
1 parent 47045b3 commit 3e1c1bc

File tree

1 file changed

+15
-17
lines changed
  • examples/metrics-lock-contention/src

1 file changed

+15
-17
lines changed

examples/metrics-lock-contention/src/main.rs

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ use opentelemetry_sdk::metrics::{ManualReader, SdkMeterProvider};
44
use std::env::args;
55
use std::fmt::Debug;
66
use std::str::FromStr;
7+
use std::sync::Arc;
8+
use std::sync::atomic::{AtomicBool, Ordering};
79
use std::thread::{spawn, JoinHandle};
810
use std::time::{Duration, Instant};
911

@@ -13,19 +15,27 @@ const RUN_TIME: Duration = Duration::from_secs(120);
1315

1416
fn main() {
1517
let mode: Mode = args().nth(1).unwrap_or("shared".to_string()).parse().unwrap();
18+
let exit_signal = Arc::new(AtomicBool::new(false));
1619

1720
println!("Running with mode: {:?}, Duration: {}s, Threads: {}", mode, RUN_TIME.as_secs(), NUM_THREADS);
1821

1922
let handles: Vec<JoinHandle<_>> = match mode {
2023
Mode::Shared => {
2124
let provider = create_meter_provider();
22-
(0..NUM_THREADS).map(move |_|start_work(provider.clone())).collect()
25+
let signal = Arc::clone(&exit_signal);
26+
(0..NUM_THREADS).map(move |_|start_work(provider.clone(), signal.clone())).collect()
2327
}
2428
Mode::PerThread => {
25-
(0..NUM_THREADS).map(move |_|start_work(create_meter_provider())).collect()
29+
let signal = Arc::clone(&exit_signal);
30+
(0..NUM_THREADS).map(move |_|start_work(create_meter_provider(), signal.clone())).collect()
2631
}
2732
};
2833

34+
_ = spawn(move || {
35+
std::thread::sleep(RUN_TIME);
36+
exit_signal.store(true, Ordering::Relaxed);
37+
});
38+
2939
let sum = handles
3040
.into_iter()
3141
.map(|h| h.join().unwrap())
@@ -34,29 +44,17 @@ fn main() {
3444
println!("Reported Metrics: {} millions", (sum / 1_000_000));
3545
}
3646

37-
fn start_work(meter_provider: SdkMeterProvider) -> JoinHandle<usize> {
47+
fn start_work(meter_provider: SdkMeterProvider, exit_signal: Arc<AtomicBool>) -> JoinHandle<usize> {
3848
let histogram = meter_provider.meter("dummy").f64_histogram("histogram").build();
3949
spawn(move || {
4050
let mut count = 0_usize;
4151
let now = Instant::now();
4252

4353
loop {
44-
histogram.record(
45-
10.5,
46-
&[
47-
KeyValue::new("mykey1", "myvalue1"),
48-
KeyValue::new("mykey2", "myvalue2"),
49-
KeyValue::new("mykey3", "myvalue3"),
50-
KeyValue::new("mykey4", "myvalue4"),
51-
KeyValue::new("mykey5", "myvalue5"),
52-
KeyValue::new("mykey6", "myvalue6"),
53-
KeyValue::new("mykey7", "myvalue7"),
54-
],
55-
);
56-
54+
histogram.record(10.5, &[]);
5755
count = count.checked_add(1).unwrap();
5856

59-
if now.elapsed() > RUN_TIME {
57+
if exit_signal.load(Ordering::Relaxed) {
6058
break;
6159
}
6260
}

0 commit comments

Comments
 (0)