多线程介绍

1. 在iOS中队列分为以下几种:

  • 串行队列:(队列中的任务只会顺序执行,任务按往队列里的添加先后顺序执行,先进先出(FIFO),前一个任务执行完再开始执行下一个任务。(我们开发中主线程队列就是一个串行队列,所以我们经常在主线程写的一般任务(不考虑多线程),都是顺序执行的)。注意一个串行队列里只有一个线程。
dispatch_queue_t q = dispatch_queue_create("...", DISPATCH_QUEUE_SERIAL);
  • 并行队列: (任务会在这个队列中新开线程,并发同时执行(无序)。)
dispatch_queue_t q = dispatch_queue_create("......",DISPATCH_QUEUE_CONCURRENT);
  • 全局队列:(是系统的,直接拿过来(GET)用就可以;与并行队列类似)
dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
  • 主队列:(每一个应用程序对应唯一主队列,直接GET即可;在多线程开发中,使用主队列更新UI)
dispatch_queue_t q = dispatch_get_main_queue();

2. 线程执行方式

  • 同步执行 (任务都在当前线程中执行,执行过程中会阻塞当前线程
dispatch_async(queue, ^{    // 执行代码    })
  • 异步执行(任务会开辟新的线程,并在新的线程中执行,不会阻塞当前线程
dispatch_sync(queue, ^{    // 执行代码    })

根据不同的队列种类及执行方式组和为一下四种形式

  • 1)串行队列同步执行
  • 2)串行队列异步执行
  • 3)并发队列同步执行
  • 4)并发队列异步执行
并行队列 串行队列
同步执行(无开启新线程能力 任务都在当前线程执行(同步),但是是顺序执行的(并没有体现并发的特性)(不开启新线程 任务都在当前线程执行(同步),并且顺序执行(串行)(不开启新线程
异步执行(有开启新线程的能力) 任务在开辟的多个子线程中执行(异步),并且是同时执行的(并发)(开启多调子线程) 任务都在开辟的新的子线程中执行(异步),并且顺序执行(串行)(开启一条子线程)

更多细节见下图:


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容