您的位置:首页 > 移动开发 > IOS开发

iOS GCD dispatch多线程 同步异步

2016-06-08 15:31 489 查看
1.主线程队列是串行的、全局队列是并发的。

2.请求分同步和异步,同步会阻塞当前线程,异步不会。

3.如果队列是串行的,即使是异步,也是一个一个执行,按照添加的顺序执行。

4.如果队列是异步的,同步请求也会使队列一个一个执行,因为同步请求会阻塞当前线程,如果是异步的会并行执行,可以使用优先级来设置执行的优先顺序。

dispatch_sync 同步请求

//异步请求

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{  

    // 耗时的操作  

    dispatch_async(dispatch_get_main_queue(), ^{  

        // 更新界面  

    });  

});

5.dispatch_barrier_sync(ConCurrentqueue,{})前面的任务并发完成后才会执行这个任务,而这个任务后面的需这个任务执行完之后才会并发执行。

  dispatch_barrier_async前面队列中的任务并发执行完之后会执行这个任务,这个队列后面的任务需要这个执行完了之后才会触发,和上面的不同是他是异步的不会等待,如果这个任务下面有别的代码不在队列中的会有可能先执行,而同步的不会必须等这个任务执行完之后才会执行。

6.线程死锁:主要是在串行队列中使用了同步任务,会阻塞当前线程把把任务添加到队尾,等待别的任务执行,而别的任务又需要此任务执行后才能执行就导致死锁,如果当前线程还有别的任务需要小心使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: