#[bench] fn par_inout(b: &mut Bencher) { let threads = num_cpus::get(); let steps = TOTAL_STEPS / threads; let (s, r) = unbounded::<i32>();
let (s1, r1) = bounded(0); let (s2, r2) = bounded(0);
scope(|scope| { for _ in0..threads {
scope.spawn(|_| { while r1.recv().is_ok() { for i in0..steps {
s.send(i as i32).unwrap();
r.recv().unwrap();
}
s2.send(()).unwrap();
}
});
}
b.iter(|| { for _ in0..threads {
s1.send(()).unwrap();
} for _ in0..threads {
r2.recv().unwrap();
}
});
drop(s1);
})
.unwrap();
}
#[bench] fn spsc(b: &mut Bencher) { let steps = TOTAL_STEPS; let (s, r) = unbounded::<i32>();
let (s1, r1) = bounded(0); let (s2, r2) = bounded(0);
scope(|scope| {
scope.spawn(|_| { while r1.recv().is_ok() { for i in0..steps {
s.send(i as i32).unwrap();
}
s2.send(()).unwrap();
}
});
#[bench] fn spmc(b: &mut Bencher) { let threads = num_cpus::get() - 1; let steps = TOTAL_STEPS / threads; let (s, r) = unbounded::<i32>();
let (s1, r1) = bounded(0); let (s2, r2) = bounded(0);
scope(|scope| { for _ in0..threads {
scope.spawn(|_| { while r1.recv().is_ok() { for _ in0..steps {
r.recv().unwrap();
}
s2.send(()).unwrap();
}
});
}
b.iter(|| { for _ in0..threads {
s1.send(()).unwrap();
} for i in0..steps * threads {
s.send(i as i32).unwrap();
} for _ in0..threads {
r2.recv().unwrap();
}
});
drop(s1);
})
.unwrap();
}
#[bench] fn mpsc(b: &mut Bencher) { let threads = num_cpus::get() - 1; let steps = TOTAL_STEPS / threads; let (s, r) = unbounded::<i32>();
let (s1, r1) = bounded(0); let (s2, r2) = bounded(0);
scope(|scope| { for _ in0..threads {
scope.spawn(|_| { while r1.recv().is_ok() { for i in0..steps {
s.send(i as i32).unwrap();
}
s2.send(()).unwrap();
}
});
}
b.iter(|| { for _ in0..threads {
s1.send(()).unwrap();
} for _ in0..steps * threads {
r.recv().unwrap();
} for _ in0..threads {
r2.recv().unwrap();
}
});
drop(s1);
})
.unwrap();
}
#[bench] fn mpmc(b: &mut Bencher) { let threads = num_cpus::get(); let steps = TOTAL_STEPS / threads; let (s, r) = unbounded::<i32>();
let (s1, r1) = bounded(0); let (s2, r2) = bounded(0);
scope(|scope| { for _ in0..threads / 2 {
scope.spawn(|_| { while r1.recv().is_ok() { for i in0..steps {
s.send(i as i32).unwrap();
}
s2.send(()).unwrap();
}
});
} for _ in0..threads / 2 {
scope.spawn(|_| { while r1.recv().is_ok() { for _ in0..steps {
r.recv().unwrap();
}
s2.send(()).unwrap();
}
});
}
b.iter(|| { for _ in0..threads {
s1.send(()).unwrap();
} for _ in0..threads {
r2.recv().unwrap();
}
});
drop(s1);
})
.unwrap();
}
}
mod bounded_n { usesuper::*;
#[bench] fn spsc(b: &mut Bencher) { let steps = TOTAL_STEPS; let (s, r) = bounded::<i32>(steps);
let (s1, r1) = bounded(0); let (s2, r2) = bounded(0);
scope(|scope| {
scope.spawn(|_| { while r1.recv().is_ok() { for i in0..steps {
s.send(i as i32).unwrap();
}
s2.send(()).unwrap();
}
});
#[bench] fn spmc(b: &mut Bencher) { let threads = num_cpus::get() - 1; let steps = TOTAL_STEPS / threads; let (s, r) = bounded::<i32>(steps * threads);
let (s1, r1) = bounded(0); let (s2, r2) = bounded(0);
scope(|scope| { for _ in0..threads {
scope.spawn(|_| { while r1.recv().is_ok() { for _ in0..steps {
r.recv().unwrap();
}
s2.send(()).unwrap();
}
});
}
b.iter(|| { for _ in0..threads {
s1.send(()).unwrap();
} for i in0..steps * threads {
s.send(i as i32).unwrap();
} for _ in0..threads {
r2.recv().unwrap();
}
});
drop(s1);
})
.unwrap();
}
#[bench] fn mpsc(b: &mut Bencher) { let threads = num_cpus::get() - 1; let steps = TOTAL_STEPS / threads; let (s, r) = bounded::<i32>(steps * threads);
let (s1, r1) = bounded(0); let (s2, r2) = bounded(0);
scope(|scope| { for _ in0..threads {
scope.spawn(|_| { while r1.recv().is_ok() { for i in0..steps {
s.send(i as i32).unwrap();
}
s2.send(()).unwrap();
}
});
}
b.iter(|| { for _ in0..threads {
s1.send(()).unwrap();
} for _ in0..steps * threads {
r.recv().unwrap();
} for _ in0..threads {
r2.recv().unwrap();
}
});
drop(s1);
})
.unwrap();
}
#[bench] fn par_inout(b: &mut Bencher) { let threads = num_cpus::get(); let steps = TOTAL_STEPS / threads; let (s, r) = bounded::<i32>(threads);
let (s1, r1) = bounded(0); let (s2, r2) = bounded(0);
scope(|scope| { for _ in0..threads {
scope.spawn(|_| { while r1.recv().is_ok() { for i in0..steps {
s.send(i as i32).unwrap();
r.recv().unwrap();
}
s2.send(()).unwrap();
}
});
}
b.iter(|| { for _ in0..threads {
s1.send(()).unwrap();
} for _ in0..threads {
r2.recv().unwrap();
}
});
drop(s1);
})
.unwrap();
}
#[bench] fn mpmc(b: &mut Bencher) { let threads = num_cpus::get();
assert_eq!(threads % 2, 0); let steps = TOTAL_STEPS / threads; let (s, r) = bounded::<i32>(steps * threads);
let (s1, r1) = bounded(0); let (s2, r2) = bounded(0);
scope(|scope| { for _ in0..threads / 2 {
scope.spawn(|_| { while r1.recv().is_ok() { for i in0..steps {
s.send(i as i32).unwrap();
}
s2.send(()).unwrap();
}
});
} for _ in0..threads / 2 {
scope.spawn(|_| { while r1.recv().is_ok() { for _ in0..steps {
r.recv().unwrap();
}
s2.send(()).unwrap();
}
});
}
b.iter(|| { for _ in0..threads {
s1.send(()).unwrap();
} for _ in0..threads {
r2.recv().unwrap();
}
});
drop(s1);
})
.unwrap();
}
}
#[bench] fn spsc(b: &mut Bencher) { let steps = TOTAL_STEPS; let (s, r) = bounded::<i32>(1);
let (s1, r1) = bounded(0); let (s2, r2) = bounded(0);
scope(|scope| {
scope.spawn(|_| { while r1.recv().is_ok() { for i in0..steps {
s.send(i as i32).unwrap();
}
s2.send(()).unwrap();
}
});
#[bench] fn spmc(b: &mut Bencher) { let threads = num_cpus::get() - 1; let steps = TOTAL_STEPS / threads; let (s, r) = bounded::<i32>(1);
let (s1, r1) = bounded(0); let (s2, r2) = bounded(0);
scope(|scope| { for _ in0..threads {
scope.spawn(|_| { while r1.recv().is_ok() { for _ in0..steps {
r.recv().unwrap();
}
s2.send(()).unwrap();
}
});
}
b.iter(|| { for _ in0..threads {
s1.send(()).unwrap();
} for i in0..steps * threads {
s.send(i as i32).unwrap();
} for _ in0..threads {
r2.recv().unwrap();
}
});
drop(s1);
})
.unwrap();
}
#[bench] fn mpsc(b: &mut Bencher) { let threads = num_cpus::get() - 1; let steps = TOTAL_STEPS / threads; let (s, r) = bounded::<i32>(1);
let (s1, r1) = bounded(0); let (s2, r2) = bounded(0);
scope(|scope| { for _ in0..threads {
scope.spawn(|_| { while r1.recv().is_ok() { for i in0..steps {
s.send(i as i32).unwrap();
}
s2.send(()).unwrap();
}
});
}
b.iter(|| { for _ in0..threads {
s1.send(()).unwrap();
} for _ in0..steps * threads {
r.recv().unwrap();
} for _ in0..threads {
r2.recv().unwrap();
}
});
drop(s1);
})
.unwrap();
}
#[bench] fn mpmc(b: &mut Bencher) { let threads = num_cpus::get(); let steps = TOTAL_STEPS / threads; let (s, r) = bounded::<i32>(1);
let (s1, r1) = bounded(0); let (s2, r2) = bounded(0);
scope(|scope| { for _ in0..threads / 2 {
scope.spawn(|_| { while r1.recv().is_ok() { for i in0..steps {
s.send(i as i32).unwrap();
}
s2.send(()).unwrap();
}
});
} for _ in0..threads / 2 {
scope.spawn(|_| { while r1.recv().is_ok() { for _ in0..steps {
r.recv().unwrap();
}
s2.send(()).unwrap();
}
});
}
b.iter(|| { for _ in0..threads {
s1.send(()).unwrap();
} for _ in0..threads {
r2.recv().unwrap();
}
});
drop(s1);
})
.unwrap();
}
}
#[bench] fn spsc(b: &mut Bencher) { let steps = TOTAL_STEPS; let (s, r) = bounded::<i32>(0);
let (s1, r1) = bounded(0); let (s2, r2) = bounded(0);
scope(|scope| {
scope.spawn(|_| { while r1.recv().is_ok() { for i in0..steps {
s.send(i as i32).unwrap();
}
s2.send(()).unwrap();
}
});
#[bench] fn spmc(b: &mut Bencher) { let threads = num_cpus::get() - 1; let steps = TOTAL_STEPS / threads; let (s, r) = bounded::<i32>(0);
let (s1, r1) = bounded(0); let (s2, r2) = bounded(0);
scope(|scope| { for _ in0..threads {
scope.spawn(|_| { while r1.recv().is_ok() { for _ in0..steps {
r.recv().unwrap();
}
s2.send(()).unwrap();
}
});
}
b.iter(|| { for _ in0..threads {
s1.send(()).unwrap();
} for i in0..steps * threads {
s.send(i as i32).unwrap();
} for _ in0..threads {
r2.recv().unwrap();
}
});
drop(s1);
})
.unwrap();
}
#[bench] fn mpsc(b: &mut Bencher) { let threads = num_cpus::get() - 1; let steps = TOTAL_STEPS / threads; let (s, r) = bounded::<i32>(0);
let (s1, r1) = bounded(0); let (s2, r2) = bounded(0);
scope(|scope| { for _ in0..threads {
scope.spawn(|_| { while r1.recv().is_ok() { for i in0..steps {
s.send(i as i32).unwrap();
}
s2.send(()).unwrap();
}
});
}
b.iter(|| { for _ in0..threads {
s1.send(()).unwrap();
} for _ in0..steps * threads {
r.recv().unwrap();
} for _ in0..threads {
r2.recv().unwrap();
}
});
drop(s1);
})
.unwrap();
}
#[bench] fn mpmc(b: &mut Bencher) { let threads = num_cpus::get(); let steps = TOTAL_STEPS / threads; let (s, r) = bounded::<i32>(0);
let (s1, r1) = bounded(0); let (s2, r2) = bounded(0);
scope(|scope| { for _ in0..threads / 2 {
scope.spawn(|_| { while r1.recv().is_ok() { for i in0..steps {
s.send(i as i32).unwrap();
}
s2.send(()).unwrap();
}
});
} for _ in0..threads / 2 {
scope.spawn(|_| { while r1.recv().is_ok() { for _ in0..steps {
r.recv().unwrap();
}
s2.send(()).unwrap();
}
});
}
b.iter(|| { for _ in0..threads {
s1.send(()).unwrap();
} for _ in0..threads {
r2.recv().unwrap();
}
});
drop(s1);
})
.unwrap();
}
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.32 Sekunden
(vorverarbeitet am 2026-08-26)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.