refactor: optimize parallel build and fix architectural issues

This commit is contained in:
peoplemiau1
2026-05-13 19:35:43 +03:00
parent f507148849
commit f5fd273e29
5 changed files with 59 additions and 151 deletions

View File

@@ -112,44 +112,9 @@ fn build_objects(
.map(|s| common::object_path(obj_dir, s, obj_ext))
.collect();
let num_threads = std::thread::available_parallelism()
.map(|n| n.get())
.unwrap_or(1);
let counter = std::sync::atomic::AtomicUsize::new(0);
let err_msg = std::sync::Mutex::new(None);
std::thread::scope(|s| {
for _ in 0..num_threads {
s.spawn(|| {
loop {
if err_msg.lock().unwrap().is_some() {
break;
}
let i = counter.fetch_add(1, std::sync::atomic::Ordering::SeqCst);
if i >= sources.len() {
break;
}
let source = &sources[i];
let obj_path = &objects[i];
if let Err(e) = build_object(assembler, source, obj_path, ctx) {
let mut err = err_msg.lock().unwrap();
if err.is_none() {
*err = Some(e);
}
break;
}
}
});
}
});
if let Some(err) = err_msg.into_inner().unwrap() {
return Err(err);
}
common::parallel_build(sources.len(), |i| {
build_object(assembler, &sources[i], &objects[i], ctx)
})?;
Ok(objects)
}