搜索
您的当前位置:首页正文

iOS 多线程基本概念

来源:二三娱乐

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(),会造成死锁.
Top