示例:
dispatch_sync(someConcurrentQueue, ^(){
dispatch_apply(5,someConcurrentQueue, ^(size_t i){
// do some non-thread safe operation
});
});
我决定对此进行测试,并注意到非线程安全操作按预期执行。但是,当我使用全局队列调用dispatch_sync时,事情很快就会恶化。
所以我的问题是: 1.通过这样的电话在幕后发生了什么? 2. dispatch_apply的每次迭代都是在其自己的线程上抢先调度然后串行执行的吗? 3.如果2的答案是肯定的,那么在无限循环中这样做是否会提高性能?原因是操作可以在最后一次完成后立即开始执行,而不是再次循环。
答案 0 :(得分:2)
这大致与:
相同dispatch_sync(someConcurrentQueue, ^(){
for (size_t i = 0; i < 5; ++i){
dispatch_async(someConcurrentQueue, ^(){
// do some non-thread safe operation
});
}
});
操作将在同一队列中排队,代码将运行的线程更多是实现细节。因此,如果您在无限循环中执行此操作,它将看起来像这样:
当您的下一个dispatch_sync
在dispatch_apply
被安排(未执行)后执行时,您的队列将会非常快速地增加。