首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在dispatch_sync中从同一并发队列调用dispatch_apply时,内部会发生什么情况

在dispatch_sync中从同一并发队列调用dispatch_apply时,内部会发生什么情况
EN

Stack Overflow用户
提问于 2011-10-20 03:23:12
回答 1查看 1.8K关注 0票数 2

示例:

代码语言:javascript
运行
复制
dispatch_sync(someConcurrentQueue, ^(){
    dispatch_apply(5,someConcurrentQueue, ^(size_t i){
        // do some non-thread safe operation
     });
});

我决定对此进行测试,并注意到非线程安全操作的执行情况与预期相符。但是,当我使用全局队列调用dispatch_sync时,情况很快就恶化了。

所以我的问题是: 1.这样的调用背后发生了什么? 2. dispatch_apply的每次迭代都是在自己的线程上抢占调度,然后串行执行吗? 3.如果2的答案是肯定的,那么在无限循环中这样做会提高性能吗?理由是,操作可以在最后一个操作完成后立即开始执行,而不是再次循环。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-22 16:15:50

这与以下内容大致相同:

代码语言:javascript
运行
复制
dispatch_sync(someConcurrentQueue, ^(){
    for (size_t i = 0; i < 5; ++i){
        dispatch_async(someConcurrentQueue, ^(){
            // do some non-thread safe operation
        });
    }
});

操作将在同一队列中排队,代码将在哪个线程上运行更多的是实现细节。因此,如果您在无限循环中执行此操作,它将如下所示:

  • sync
  • async(0)
  • async(1)
  • async(2)
  • async(3)
  • async(4)
  • sync
  • ...

一旦调度了dispatch_apply (不执行),就会执行下一个dispatch_sync,因此队列的大小会很快增加。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7826918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档