mirror of
https://codeberg.org/ziglang/zig.git
synced 2025-12-06 05:44:20 +00:00
41 lines
1.3 KiB
Zig
41 lines
1.3 KiB
Zig
const num_tasks = 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 args = try std.process.argsAlloc(arena);
|
|
const env = try std.process.getEnvMap(arena);
|
|
|
|
const process_index = try std.fmt.parseInt(usize, args[1], 10);
|
|
|
|
var job_client: std.job.Client = try .init(arena, &env);
|
|
defer job_client.deinit();
|
|
|
|
var thread_pool: std.Thread.Pool = undefined;
|
|
try thread_pool.init(.{ .allocator = arena, .job_client = &job_client });
|
|
defer thread_pool.deinit();
|
|
|
|
// Spawn a bunch of tasks with a variable amount of CPU-intensive work
|
|
var rng: std.Random.DefaultPrng = .init(process_index);
|
|
const r = rng.random();
|
|
for (0..num_tasks) |_| {
|
|
try thread_pool.spawn(doWork, .{ process_index, r.intRangeAtMost(u32, 300_000, 1_000_000) });
|
|
}
|
|
}
|
|
|
|
fn doWork(
|
|
process_index: usize,
|
|
work_amount: u32,
|
|
) void {
|
|
std.log.info("[process {d}] start", .{process_index});
|
|
defer std.log.info("[process {d}] stop", .{process_index});
|
|
|
|
// Badly simulate single-threaded CPU-intensive work
|
|
for (0..work_amount) |_| {
|
|
for (0..1000) |_| asm volatile ("nop");
|
|
}
|
|
}
|
|
|
|
const std = @import("std");
|