天天看点

iOS 多线程GCD-栅栏函数

提交一个栅栏函数在同步执行中,它会等待栅栏函数执行完再去执行下一行代码(注意是下一行代码),同步栅栏函数是在主线程中执行的

dispatch_barrier_sync(dispatch_queue_t queue, dispatch_block_t blcok);

提交一个栅栏函数在异步执行中,它会立马返回开始执行下一行代码(不用等待任务执行完毕)

dispatch_barrier_async(dispatch_queue_t queue, dispatch_block_t blcok);

(1)串行队列+同步执行

因为是同步执行,所以不创建新的线程,在主线程中执行。

因为是串行队列,所以队列的任务一个接一个地执行并且任务一加入队列就立马执行

(2)串行队列+异步执行

因为是异步执行,所以创建了新的线程。

因为是串行队列,所以队列中的任务一个接一个执行。并且任务不是添加到队列之后立马执行,而是当所有任务添加到队列之后再执行。

3)并发队列+同步执行

因为是同步执行,不创建新的线程,在主线程中执行。

虽然是并发队列,但因为是同步执行,没有体现出并发性,任务还是一个接一个执行。并且任务一加入队列就立马执行。

(4)并发队列+异步执行

因为异步执行,所以创建了新的线程。

因为并发队列,异步执行时体现其并发性,任务之间交替着同时执行。并且任务不是添加到队列之后立马执行,而是当所有任务添加到队列之后再执行。