Zig 裏面如何使用線程池?

線程池解決了兩個不同的問題:在執行大量異步任務時,由於減少了每個任務的調用開銷,線程池通常能提高性能;在執行一系列任務時,線程池提供了一種約束和管理資源(包括線程)消耗的方法。

const std = @import("std");
const print = std.debug.print;
pub fn main() !void {
    var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
    defer arena.deinit();
    const allocator = arena.allocator();
    var pool: std.Thread.Pool = undefined;
    try pool.init(.{
        .allocator = allocator,
        .n_jobs = 4,
    });
    defer pool.deinit();
    var wg: std.Thread.WaitGroup = .{};
    for (0..10) |i| {
        pool.spawnWg(&wg, struct {
            fn run(id: usize) void {
                print("I'm from {d}\n", .{id});
            }
        }.run, .{i});
    }
    wg.wait();
    print("All threads exit.\n", .{});
}

上面示例中,在線程池中生成 10 個任務,並使用 WaitGroup 等待它們完成。

參考資料

[1]

供稿,分享:https://ziglang.cc/contributing

[2]

開源項目:https://ask.ziglang.cc/github

[3]

微信羣:https://ask.ziglang.cc/weixin

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/c2PxiUeczB4b-pqCyLXaDg