示例:
dispatch_sync(someConcurrentQueue, ^(){
dispatch_apply(5,someConcurrentQueue, ^(size_t i){
// do some non-thread safe operation
});
});我决定对此进行测试,并注意到非线程安全操作的执行情况与预期相符。但是,当我使用全局队列调用dispatch_sync时,情况很快就恶化了。
所以我的问题是: 1.这样的调用背后发生了什么? 2. dispatch_apply的每次迭代都是在自己的线程上抢占调度,然后串行执行吗? 3.如果2的答案是肯定的,那么在无限循环中这样做会提高性能吗?理由是,操作可以在最后一个操作完成后立即开始执行,而不是再次循环。
发布于 2011-10-22 16:15:50
这与以下内容大致相同:
dispatch_sync(someConcurrentQueue, ^(){
for (size_t i = 0; i < 5; ++i){
dispatch_async(someConcurrentQueue, ^(){
// do some non-thread safe operation
});
}
});操作将在同一队列中排队,代码将在哪个线程上运行更多的是实现细节。因此,如果您在无限循环中执行此操作,它将如下所示:
一旦调度了dispatch_apply (不执行),就会执行下一个dispatch_sync,因此队列的大小会很快增加。
https://stackoverflow.com/questions/7826918
复制相似问题