gpt4 book ai didi

iphone - 在 Grand Central Dispatch 中使用串行队列的 dispatch_async 与 dispatch_sync

转载 作者:IT王子 更新时间:2023-10-29 07:58:32 24 4
gpt4 key购买 nike

好吧,我喜欢 Grand Central Dispatch 并在使用它后取得了相对成功,但这是我不完全理解的事情。

假设我已经使用

创建了自己的串行队列
dispatch_queue_t myQueue;
myQueue = dispatch_queue_create("myQueue", NULL);

之后我这样做:

dispatch_async(myQueue, ^{
[self doStuff1];
});

// and a few lines later...

dispatch_sync(myQueue, ^{
[self doStuff2];
});

第一个调度是异步的。那么,它会同时完成,对吧?如果 myQueue 是串行的,那怎么可能呢?串行队列如何并行执行操作,或者如果您愿意,如何乱序执行操作?

谢谢

最佳答案

dispatch_async() 表示 block 已入队,dispatch_async()返回到在执行 block 之前(可能)将另一个任务/ block 入队。

使用 dispatch_sync(), block 被排入队列,函数不会继续将另一个任务/ block 排入队列,直到该 block 被执行。

block 仍然串行执行。您可以执行 100 个 dispatch_async() 调用,每个调用都有一个休眠 100 秒的 block ,而且速度会非常快。随后在同一串行队列上调用 dispatch_sync()dispatch_sync() 将在约 10,000 秒后返回。


更简单地说:

dispatch_async(serialQ, block1);
dispatch_async(serialQ, block2);
dispatch_sync(serialQ, block3);

block1 将在 block2 之前执行,而 block2 将在 block3 之前执行。那就是串行队列保证的顺序。

但是,对dispatch_async() 的调用可能会在任何 block 开始执行之前返回。 dispatch_sync()不会在所有三个 block 执行之前返回!

关于iphone - 在 Grand Central Dispatch 中使用串行队列的 dispatch_async 与 dispatch_sync,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5026043/

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