GCD
眼睛会放光
这个作者很懒,什么都没留下…
展开
-
GCD-group、notify、wait
1 dispatch_group_notify,dispatch_group_async执行完后再执行notify; 2 dispatch_group_wait后代码等group执行完,再执行; 例1 dispatch_group_notify - (void)groupAsyncSummit_notify{ dispatch_group_t group = dispatch...原创 2019-04-03 22:42:49 · 395 阅读 · 0 评论 -
GCD1-同步、异步,串行、并行
总结: 1 同步与异步:同步、异步是针对线程而言;同步要先执行block再返回,异步则先返回而不用等待执行block; 2串行并行 : 串行、并行是针对队列(任务);串行队列是时间上顺序执行,并行队列的任务是并发执行; //- (void)viewDidLoad中测试 //全局变量: _mainQueue = dispatch_get_main_queue(); _globalQu...原创 2019-04-05 16:52:05 · 243 阅读 · 0 评论 -
GCD2-当前线程
什么情况,block{}内当前线程为主线程? 简单回答:dispatch_get_main_queue()调用; 总结:不管是同步或异步调用,在系统主队列main queue调用,block即{}内当前线程[NSThread currentThread]是主线程,而非自定义的串行队列调用不是在主线程;本人已经测试过。 ...原创 2019-04-03 16:00:56 · 464 阅读 · 0 评论 -
GCD3-死锁条件、结构
一 gcd死锁条件, 1 资源被限制1个进程使用(互斥条件); 2 一个进程请求资源后阻塞,仍然保持不放(请求与保持条件); 3 进程资源也不被强行剥夺(不剥夺条件); 4 进程间造成循环等待资源的情况(循环等待条件); 说明:进程之间的资源竞争造成,任何一个条件不成立都不会死锁。 二 死锁结构? dispatch_x(q,^{ dispatch_sync(q,...原创 2019-04-03 16:54:37 · 267 阅读 · 0 评论 -
GCD:线程间通信
线程间通信? 当使用dispath_async函数开辟线程执行任务的完成时,我们需要使用 dispatch_async(dispatch_get_main_queue(), ^{ }); 函数会到主线程内刷新UI。并完成通信。 ...原创 2019-04-21 16:43:54 · 129 阅读 · 0 评论 -
GCD-group:notify、enter、leave、weat,after,barrier
1 dispatch_group_enter:与leave成对出现,通知group,下个任务要放入group中执行;解决多个请求依次执行问题; dispatch_group_leave:通知group,任务完成要移除; dispatch_group_notify:全部任务完成,就会调用;enter+1,leave减1,为0时才会通知group任务完成; dispatch_group_wait:...原创 2019-04-15 09:34:58 · 295 阅读 · 0 评论 -
GCD:semaphore解决同步与异步最大并发数
#import "Semaphore.h" @implementation Semaphore //参考:https://www.jianshu.com/p/2dd2433e2d4a #pragma - 解决同步问题:任务1、2、3按顺序执行 + (void)syncTest{ dispatch_queue_t queue = dispatch_get_global_queue(DI...原创 2019-04-15 09:41:38 · 259 阅读 · 0 评论 -
GCD:apply(作用:同步执行多个并发任务)
//多个任务并发执行完后,再执行apply后面任务,优于循环 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); //10:执行10次,index:执行编号 dispatch_apply(10, queue, ^(size_t index) { ...原创 2019-04-15 10:31:49 · 127 阅读 · 0 评论