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