mirror of
https://github.com/actix/actix-web.git
synced 2024-11-25 19:11:10 +00:00
docs: example of CPU core pinning
This commit is contained in:
parent
534cfe1fda
commit
c366649516
2 changed files with 42 additions and 1 deletions
|
@ -35,7 +35,6 @@ features = [
|
|||
"secure-cookies",
|
||||
]
|
||||
|
||||
|
||||
[lib]
|
||||
name = "actix_web"
|
||||
path = "src/lib.rs"
|
||||
|
@ -130,6 +129,7 @@ awc = { version = "3", features = ["openssl"] }
|
|||
|
||||
brotli = "6"
|
||||
const-str = "0.5"
|
||||
core_affinity = "0.8"
|
||||
criterion = { version = "0.5", features = ["html_reports"] }
|
||||
env_logger = "0.11"
|
||||
flate2 = "1.0.13"
|
||||
|
|
41
actix-web/examples/worker-cpu-pin.rs
Normal file
41
actix-web/examples/worker-cpu-pin.rs
Normal file
|
@ -0,0 +1,41 @@
|
|||
use std::{
|
||||
io,
|
||||
sync::{
|
||||
atomic::{AtomicUsize, Ordering},
|
||||
Arc,
|
||||
},
|
||||
thread,
|
||||
};
|
||||
|
||||
use actix_web::{middleware, web, App, HttpServer};
|
||||
|
||||
async fn hello() -> &'static str {
|
||||
"Hello world!"
|
||||
}
|
||||
|
||||
#[actix_web::main]
|
||||
async fn main() -> io::Result<()> {
|
||||
env_logger::init_from_env(env_logger::Env::new().default_filter_or("info"));
|
||||
|
||||
let core_ids = core_affinity::get_core_ids().unwrap();
|
||||
let n_core_ids = core_ids.len();
|
||||
let next_core_id = Arc::new(AtomicUsize::new(0));
|
||||
|
||||
HttpServer::new(move || {
|
||||
let pin = Arc::clone(&next_core_id).fetch_add(1, Ordering::AcqRel);
|
||||
log::info!(
|
||||
"setting CPU affinity for worker {}: pinning to core {}",
|
||||
thread::current().name().unwrap(),
|
||||
pin,
|
||||
);
|
||||
core_affinity::set_for_current(core_ids[pin]);
|
||||
|
||||
App::new()
|
||||
.wrap(middleware::Logger::default())
|
||||
.service(web::resource("/").get(hello))
|
||||
})
|
||||
.bind(("127.0.0.1", 8080))?
|
||||
.workers(n_core_ids)
|
||||
.run()
|
||||
.await
|
||||
}
|
Loading…
Reference in a new issue