gpt4 book ai didi

iphone - dispatch_get_global_queue 行为

转载 作者:行者123 更新时间:2023-12-03 18:16:28 25 4
gpt4 key购买 nike

以下代码:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
for (int i=0; i<100000; i++) {
NSLog(@"HIGH 1 %d", i);
}
});
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
for (int i=0; i<100000; i++) {
NSLog(@"LOW %d", i);
}
});
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
for (int i=0; i<100000; i++) {
NSLog(@"HIGH 2 %d", i);
}
});

结果是高 1、高 2 和低对数的混合。

它是如何同时打印high1和high2日志的? high1 和 high2 博客不是在同一个队列中吗?那么 high1 block 不应该在开始执行 high2 block 之前完成吗?

最佳答案

这取决于您运行的机器。我怀疑你在 Mac 上运行这个,因为 GCD 会自动为特定系统创建足够的线程来处理全局队列上的作业。因此,您可能有多个核心,因此 GCD 在两个核心上运行您的作业。

如果您使用 dispatch_queue_create 创建队列,您将获得一个串行队列,并且可以保证 FIFO 行为。

FWIW(尽管你不应该依赖这种行为),如果你在 iPhone 上运行它,我怀疑你会看到串行队列行为,因为你的 iPhone 是单核的。不过,请不要相信这一点,我认为 iPad 2 是多核的!

编辑:

dispatch_get_global_queue 的文档: 返回给定优先级的众所周知的全局并发队列。

关于iphone - dispatch_get_global_queue 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6872286/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com