多线程中的串行/并行/同步/异步 笔记
1 线程: 线程是进程中一个独立的执行路径(控制单元);一个进程中至少包含一个线程,即主线程
2 队列 :dispatch_queue_t,一种先进先出的数据结构,线程的创建和回收不需要程序员操作,由队列负责。
3 串行队列:队列中的任务只会顺序执行 dispatch_queue_t q = dispatch_queue_create(“....”, dispatch_queue_serial);
4 并行队列:队列中的任务通常会并发执行
dispatch_queue_t q = dispatch_queue_create("......", dispatch_queue_concurrent);
5 全局队列:是系统开发的,直接拿过来(get)用就可以;与并行队列类似,但调试时,无法确认操作所在队列。
dispatch_queue_t q = dispatch_get_global_queue(dispatch_queue_priority_default, 0);
6 主队列:每一个应用程序对应唯一一个主队列,直接get即可;在多线程开发中,使用主队列更新UI
dispatch_queue_t q = dispatch_get_main_queue();
7 dispatch_async 异步操作,并发执行,无法确定任务的执行顺序;dispatch_sync 同步操作,会依次顺序执行,能够确定任务的执行顺序。
8 串行队列同步:操作不会新建线程,操作顺序执行;
串行队列异步:操作需要创建一个子线程,会创建子线程,线程的创建和回收不用程序员参与,操作顺序执行。
并行队列同步:操作不会新建线程,操作顺序执行
并行队列异步:操作会创建多个线程(有多少任务,就开n个线程执行),操作无序执行,队列前如果有其他任务,等待前面的任务执行完成后再去执行。
全局队列异步:操作会新建多个线程,操作无序执行,队列前如果有其他任务,会等待前面的任务执行完成后再执行
全局队列同步:操作不会新建线程,操作顺序执行。
主队列异步:操作都应该在主线程上顺序执行的,不存在异步。
主队列同步:如果把主线程中的操作看成一个大的block,那么除非主线程被用户杀掉,否则永远不会结束。主队列中添加的同步操作永远不会执行,会死锁。
9 队列和线程的区别:
队列是管理线程的,相当于线程池,能管理线程什么时候执行。
队列分为串行队列和并行队列
串行队列:队列中的线程按顺序执行 不会同时执行
并行队列:队列中的线程会并发执行。