相关疑难解决方法(0)

GCD中的并发vs串行队列

我正在努力完全理解GCD中的并发和串行队列.我有一些问题,希望有人能够清楚地回答我.

  1. 我正在读取串行队列的创建和使用,以便一个接一个地执行任务.但是,如果出现以下情况:

    • 我创建了一个串行队列
    • 我使用dispatch_async(在我刚创建的串行队列上)三次来发送三个块A,B,C

    这三个块会被执行:

    • 按顺序A,B,C,因为队列是串行的

      要么

    • 同时(在parralel线程上同时)因为我使用了ASYNC调度
  2. 我正在阅读我可以dispatch_sync在并发队列上使用,以便一个接一个地执行块.在这种情况下,为什么串行队列甚至存在,因为我总是可以使用并发队列,我可以根据需要同步调度多个块?

    谢谢你的任何好解释!

concurrency multithreading grand-central-dispatch ios

106
推荐指数
5
解决办法
5万
查看次数

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

好的,我喜欢Grand Central Dispatch并且在使用它之后相对成功,但这是我不完全理解的.

假设我已经创建了自己的串行队列

dispatch_queue_t myQueue;
myQueue = dispatch_queue_create("myQueue", NULL);
Run Code Online (Sandbox Code Playgroud)

之后我这样做:

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

// and a few lines later...

dispatch_sync(myQueue, ^{
  [self doStuff2];
});
Run Code Online (Sandbox Code Playgroud)

第一个调度是异步的.那么,它将同时完成,对吧?如果myQueue是串行的怎么办?串行队列如何并行执行,或者如果不按顺序执行?

谢谢

iphone objective-c grand-central-dispatch ios

24
推荐指数
1
解决办法
1万
查看次数