iOS 多线程基本概念

2016-06-29  本文已影响23人  着魔的毛豆

iOS 多线程基本概念

容易混淆的几点

同步:不会开启新线程
异步:可以开启新线程(但不代表一定会开启新线程)

串行:任务一个一个执行
并发:多个任务同时执行(通常与异步配合使用从而实现多线程)

队列的创建串行队列与并发队列都有两种创建方式

// 手动创建串行队列 
dispatch_queue_t queue = dispatch_queue_create("com.example.myqueue", DISPATCH_QUEUE_SERIAL);  
// 系统主队列 
dispatch_queue_t main_queue = dispatch_get_main_queue();
// 手动创建并发队列 
dispatch_queue_t queue = dispatch_queue_create("com.example.myqueue", DISPATCH_QUEUE_CONCURRENT);  

// 系统并发队列 
dispatch_queue_t globl_queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

几种组合

// 1.手动创建串行队列(会开启新线程,任务串行执行)
dispatch_queue_t queue = dispatch_queue_create("com.example.myqueue", DISPATCH_QUEUE_SERIAL);
dispatch_async(queue, ^{ NSLog(@"test"); });
//2.系统主队列(不会开启新线程,任务串行执行) 
dispatch_queue_t main_queue = dispatch_get_main_queue();dispatch_async(main_queue, ^{ NSLog(@"test"); });
// 不管手动创建还是使用系统的并发队列,都会开启新线程,并且任务并发执行
// 手动创建并发队列
dispatch_queue_t queue = dispatch_queue_create("com.example.myqueue", DISPATCH_QUEUE_CONCURRENT);
  dispatch_async(queue, ^{ NSLog(@"test"); }); 
// 系统并发队列 
dispatch_queue_t globl_queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(globl_queue, ^{ NSLog(@"test"); });
//这两种情况都不会开启新线程,并且任务都是串行执行```
# 注意
- 不要在主线程中使用dispatch_sync(),会造成死锁.
上一篇下一篇

猜你喜欢

热点阅读