mirror of
https://github.com/clash-verge-rev/clash-verge-rev.git
synced 2026-04-16 23:40:32 +08:00
feat(runtime): cap tokio worker threads at 16 and scale blocking threads (#6261)
This prevents the runtime from spawning an excessive number of threads on high-end CPUs, reducing memory footprint and context switching. Introduces a dynamic cap for worker threads (max 16) and scales blocking threads proportionally. Includes thread naming for diagnostics.
This commit is contained in:
parent
2e505f26ae
commit
30ed2ac829
@ -10,6 +10,7 @@ mod feat;
|
|||||||
mod module;
|
mod module;
|
||||||
mod process;
|
mod process;
|
||||||
pub mod utils;
|
pub mod utils;
|
||||||
|
|
||||||
use crate::constants::files;
|
use crate::constants::files;
|
||||||
use crate::{
|
use crate::{
|
||||||
core::handle,
|
core::handle,
|
||||||
|
|||||||
@ -1,5 +1,27 @@
|
|||||||
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
|
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
|
||||||
|
|
||||||
|
use std::sync::atomic::{AtomicUsize, Ordering};
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
let default_parallelism = std::thread::available_parallelism().map(|n| n.get()).unwrap_or(1);
|
||||||
|
let worker_limit = std::cmp::min(default_parallelism, 16);
|
||||||
|
let blocking_limit = 4 * worker_limit;
|
||||||
|
|
||||||
|
#[allow(clippy::unwrap_used)]
|
||||||
|
let tokio_runtime = tokio::runtime::Builder::new_multi_thread()
|
||||||
|
.worker_threads(worker_limit)
|
||||||
|
.max_blocking_threads(blocking_limit)
|
||||||
|
.enable_all()
|
||||||
|
.thread_name_fn(|| {
|
||||||
|
static ATOMIC_ID: AtomicUsize = AtomicUsize::new(0);
|
||||||
|
let id = ATOMIC_ID.fetch_add(1, Ordering::SeqCst);
|
||||||
|
format!("clash-verge-runtime-{id}")
|
||||||
|
})
|
||||||
|
.build()
|
||||||
|
.unwrap();
|
||||||
|
let tokio_handle = tokio_runtime.handle();
|
||||||
|
tauri::async_runtime::set(tokio_handle.clone());
|
||||||
|
|
||||||
#[cfg(feature = "tokio-trace")]
|
#[cfg(feature = "tokio-trace")]
|
||||||
console_subscriber::init();
|
console_subscriber::init();
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user