GCD 梳理

1.线程和进程的区别
进程是应用程序,是操作系统的基本结构,用来管理资源。
线程是程序用来处理任务的,一个进程可以有一个或多个线程。
2.多线程
一个CPU只能同时处理一个线程,但是可以快速切换线程,造成同时处理多个线程的假象。
3.串行队列与并发队列
串行是指多个线程按顺序执行
并发是指多个线程同时执行,其实就是CPU在多个线程中快速切换
4.同步与异步
同步是指任务一项接着一项完成,前面一个任务处理完以后才会处理下一个任务,不开启新线程。
异步是指同时处理多个任务,互不干扰,开启新线程。
5.实现多线程的四种方法
(1)pthread
(2)NSThread
(3)GCD
(4)NSOperation
6.GCD
GCD 是基于NSThread进行封装
GCD 有3中队列,全局并发队列 dispatch_get_global_queue(0,0) 主队列dispatch_get_main_queue() , 其他队列 dispatch_queue_create(0,0)
其中dispatch_get_global_queue(0,0)是全局并发队列,方便使用。并发队列可以同时多个线程一起执行、
dispatch_get_main_queue() 是给串行队列,用来给主线程用的
dispatch_queue_create(0,0) 可以根据传的参数来确定队列是串行队列DISPATCH_QUEUE_SERIAL或者并行队列DISPATCH_QUEUE_CONCURRENT
所以有3种队列,2中线程执行方式,就有了6中组合
1.串行同步 —— 任务一件一件按顺序处理,不开启新的线程
2.串行异步 —— 任务一件一件按顺序处理,开启新线程
3.并行同步 —— 虽然是并行,但是因为是同步的,任务仍然按顺序进行,开启新的线程
4.并行异步 —— 任务交叉进行,互不干扰,开启新的线程
5.主队列同步 —— 主队列比较特殊,由于主队列存在一个syncMain的线程,当其他线程加进队列来以后,线程需要等syncMain执行完毕才会执行新加入的线程,而新线程会等待syncMain处理完毕才会执行下一个线程,由此造成线程死锁进而程序崩溃
6.主队列异步 —— 任务交叉进行,互不干扰,开启新的线程

你可能感兴趣的:(GCD 梳理)