From d44538b749706df71cb6b2f04be5f961dc5eefd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Max=20K=C3=A4nner?= Date: Fri, 6 Jun 2025 21:24:18 +0200 Subject: [PATCH] make number of compute threads configurable --- battlesnake/src/main.rs | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/battlesnake/src/main.rs b/battlesnake/src/main.rs index 6da1b64..02acff8 100644 --- a/battlesnake/src/main.rs +++ b/battlesnake/src/main.rs @@ -1,4 +1,7 @@ -use std::env; +use std::{ + env, + sync::atomic::{AtomicUsize, Ordering}, +}; use axum::{ Router, @@ -21,6 +24,8 @@ use tokio::{ time::{Duration, Instant}, }; +static THREADS: AtomicUsize = AtomicUsize::new(1); + #[tokio::main] async fn main() { env_logger::init(); @@ -32,6 +37,17 @@ async fn main() { .route("/move", post(get_move)) .route("/end", post(end)); + let threads = env::var("THREADS") + .ok() + .and_then(|threads| { + threads + .parse() + .inspect_err(|err| error!("Unable to parse number of threads: {err}")) + .ok() + }) + .unwrap_or(1); + THREADS.store(threads, Ordering::Relaxed); + debug!("Creating listener"); let port = env::var("PORT").unwrap_or_else(|_| "8000".into()); let listener = TcpListener::bind(format!("0.0.0.0:{port}")).await.unwrap(); @@ -104,7 +120,7 @@ async fn get_move(request: Json) -> response::Json { _ => score_standard, }; - let action_futures = (0..3).map(|_| { + let action_futures = (0..THREADS.load(Ordering::Relaxed)).map(|_| { let request = request.clone(); let board = board.clone(); let mut rng = SmallRng::from_os_rng();