iOS中的异步和同步:
dispatch_async(异步)和dispatch_sync(同步):
决定有没有开子线程的能力,而不是指会不会开子线程。queue 决定有没有并发的能力。开子线程我就并发,不开就串行。
dispatch_async(异步)有开子线程能力。
dispatch_sync(同步)没有开子线程能力。
1.dispatch_async各种搭配后代码块中代码在什么线程中,怎样执行?
1):dispatch_get_main_queue
都在主线程中按顺序执行(比较特殊);
2):dispatch_queue_create("test", DISPATCH_QUEUE_CONCURRENT)
有并发能力
3):dispatch_queue_create("test", DISPATCH_QUEUE_SERIAL)
没并发能力(串);
4):dispatch_get_global_queue
有并发能力;
2.dispatch_async各种搭配后代码块中代码在什么线程中,怎样执行?
1):dispatch_sync 和 dispatch_get_main_queue
没有开子线程的能力,在主线程中执行。
结果:
若当前线程为主线程,则死锁崩溃(后面细说)
若当前线程为子线程,则在子线程中串行执行。
2):dispatch_sync 和 dispatch_queue_create("test", DISPATCH_QUEUE_CONCURRENT)
没有开子线程的能力,有并发的能力。
结果:当前线程中串行执行。
3):dispatch_sync 和 dispatch_queue_create("test", DISPATCH_QUEUE_SERIAL)
没有开子线程能力,串行执行
结果:当前线程中串行执行。
4):dispatch_sync 和 dispatch_get_global_queue
没有开子线程能力,有并发执行能力
结果:当前线程中串行执行。