zig/server.zig
Matthew Lugg 7d4e06b6d9
DO NOT MERGE: jobserver usage example with std.Thread.Pool
Co-authored-by: Jacob Young <jacobly0@users.noreply.github.com>
2025-12-05 11:47:13 +00:00

32 lines
1.1 KiB
Zig

const num_children = 25;
pub fn main() !void {
var arena_instance: std.heap.ArenaAllocator = .init(std.heap.page_allocator);
defer arena_instance.deinit();
const arena = arena_instance.allocator();
const cpu_count = try std.Thread.getCpuCount();
var env = try std.process.getEnvMap(arena);
var job_server: std.job.Server = try .init(arena, @intCast(cpu_count), &env);
defer job_server.deinit();
var children: [num_children]std.process.Child = undefined;
for (&children, 0..) |*c, child_num| {
const child_num_str = try std.fmt.allocPrint(arena, "{d}", .{child_num});
const argv = try arena.dupe([]const u8, &.{ switch (builtin.os.tag) {
else => "./worker",
.windows => ".\\worker.exe",
}, child_num_str });
c.* = .init(argv, arena);
c.env_map = &env;
}
std.log.info("Spawning {d} workers on {d} CPUs", .{ children.len, cpu_count });
for (&children) |*c| try c.spawn();
for (&children) |*c| _ = try c.wait();
std.log.info("All {d} workers exited", .{children.len});
}
const builtin = @import("builtin");
const std = @import("std");