Zig Cookbook

介绍

线程池

线程池解决了两个不同的问题:

  1. 在执行大量异步任务时,由于减少了每个任务的调用开销,它们通常提供更好的性能,并且
  2. 它们提供了一种限制和管理在执行任务集合时消耗的资源(包括线程)的方法。

在此示例中,我们使用 Io.Group 派发 10 个任务,并调用 await 等待它们完成。

const std = @import("std");
const Io = std.Io;
const print = std.debug.print;

pub fn main(init: std.process.Init) !void {
    const io = init.io;

    var group: Io.Group = .init;
    errdefer group.cancel(io);

    for (0..10) |i| {
        group.async(io, run, .{i});
    }
    try group.await(io);

    print("All threads exit.\n", .{});
}

fn run(id: usize) void {
    print("I'm from {d}\n", .{id});
}

上一示例:在两个线程之间共享数据
下一示例:运行一次