Performance and Reliability Capstone
Capacity Guard
Bound a Work Queue
A small queue can apply backpressure by accepting work only while capacity remains.
Program
Play the program to choose capacity and see how many jobs stay queued.
queue_capacity_guard.rs
use std::collections::VecDeque;
fn main() {
let capacity = ;
let mut queue = VecDeque::new();
let accepted = push_jobs(&mut queue, capacity);
println!("accepted={accepted} queued={}", queue.len());
}
fn push_jobs(queue: &mut VecDeque<&'static str>, capacity: usize) -> usize {
let jobs = ["parse", "build", "publish"];
let mut accepted = 0;
for job in jobs {
if queue.len() < capacity {
queue.push_back(job);
accepted += 1;
}
}
accepted
}
use std::collections::VecDeque;
fn main() {
let capacity = ;
let mut queue = VecDeque::new();
let accepted = push_jobs(&mut queue, capacity);
println!("accepted={accepted} queued={}", queue.len());
}
fn push_jobs(queue: &mut VecDeque<&'static str>, capacity: usize) -> usize {
let jobs = ["parse", "build", "publish"];
let mut accepted = 0;
for job in jobs {
if queue.len() < capacity {
queue.push_back(job);
accepted += 1;
}
}
accepted
}
use std::collections::VecDeque;
fn main() {
let capacity = ;
let mut queue = VecDeque::new();
let accepted = push_jobs(&mut queue, capacity);
println!("accepted={accepted} queued={}", queue.len());
}
fn push_jobs(queue: &mut VecDeque<&'static str>, capacity: usize) -> usize {
let jobs = ["parse", "build", "publish"];
let mut accepted = 0;
for job in jobs {
if queue.len() < capacity {
queue.push_back(job);
accepted += 1;
}
}
accepted
}
capacity
The capacity value is a simple bound on queued work.
backpressure
The third job is skipped when the queue is already full.
summary
The final print reports both accepted work and current queue length.