相关疑难解决方法(0)

具有异步等待任务组的最大线程数

我的目的是了解 Swift 5.5 的 async-await 使用的“协作线程池”,以及任务组如何自动约束并发度:考虑以下任务组代码,并行执行 32 个计算:

func launchTasks() async {
    await withTaskGroup(of: Void.self) { group in
        for i in 0 ..< 32 {
            group.addTask { [self] in
                let value = await doSomething(with: i)
                // do something with `value`
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

虽然我希望它会限制并发程度,但正如宣传的那样,我一次只能处理两个 (!) 并发任务。这比我预期的要严格得多:

在此处输入图片说明

如果我使用旧的 GCD concurrentPerform...

func launchTasks2() {
    DispatchQueue.global().async {
        DispatchQueue.concurrentPerform(iterations: 32) { [self] i in
            let value = doSomething(with: i)
            // do something with `value`
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

...我一次得到 12 个,充分利用设备(我的 6 核 …

grand-central-dispatch ios async-await swift swift5.5

9
推荐指数
1
解决办法
321
查看次数