mirror of
https://github.com/clash-verge-rev/clash-verge-rev.git
synced 2026-10-25 13:12:07 +08:00
The cap of 8 was a conservative pick from 8ccb0b9a; that commit's own setup benchmark had the 4-worker / 8-blocking row as the best config: 639.3ms avg / 645.5ms max setup time and 22.1 avg threads, ahead of the adopted 8-worker row (650.1ms / 662.4ms, 26.0 threads). Startup parallelism is unaffected in practice: the setup join! polls cooperatively on one task, and CPU work (validation, script eval, YAML parse) runs on the spawn_blocking pool, which keeps its 8-thread cap through the existing 2x invariant. A 12h live session showed the 8 idle workers accumulating under 0.5s CPU total, so four parked stacks (~0.4MB dirty) are pure overhead.
39 lines
1.3 KiB
Rust
Executable File
39 lines
1.3 KiB
Rust
Executable File
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
|
|
|
|
use std::process::ExitCode;
|
|
#[cfg(not(all(feature = "perf-harness", target_os = "macos")))]
|
|
use std::sync::atomic::{AtomicUsize, Ordering};
|
|
|
|
#[cfg(all(feature = "perf-harness", target_os = "macos"))]
|
|
#[path = "../../scripts/perf/app.rs"]
|
|
mod perf;
|
|
|
|
#[cfg(all(feature = "perf-harness", target_os = "macos"))]
|
|
fn main() -> ExitCode {
|
|
perf::run()
|
|
}
|
|
|
|
#[cfg(not(all(feature = "perf-harness", target_os = "macos")))]
|
|
fn main() -> ExitCode {
|
|
let default_parallelism = std::thread::available_parallelism().map(|n| n.get()).unwrap_or(1);
|
|
let worker_limit = std::cmp::min(default_parallelism, 4);
|
|
let blocking_limit = 2 * 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());
|
|
|
|
app_lib::run()
|
|
}
|