队列的概念和作用:
队列不是线程,队列是用来组织任务的,将任务加到队列中,任务会按照加入到队列中先后顺序依次执行,如果是同步队列,会在当前线程中执行,如果是异步队列,则操作系统会根据系统资源去创建新的线程去处理队列中的任务,线程的创建、维护和销毁由操作系统管理,系统会给我做很多优化
队列的分类:
串行队列:
按照FIFO原则,顺序执行,先加入队列中的任务先执行,一个任务一任务的顺序执行,只有等到队列中上一个任务完成,才能执行下一个任务
并行队列:
任务是按照加入到队列中的顺序开始执行,但任务完成时的顺序是不确定的
队列和线程的关系:
在一个线程内可能有多个队列,这些队列可能是串行的或者是并行的,按照同步或者异步的方式工作
异步的,则会开启新的线程工作
同步的,会在当前线程内工作,不会创建新的线程
注意:并行同步队列,不会创建新的线程而且会是顺序执行相当于串行同步队列
主线程和主队列的关系:
主队列是主线中的一个串行队列
所有的和UI的操作(刷新或者点击按钮)都必须在主线程中的主队列中去执行
否则无法更新UI
每一个应用程序只有唯一的一个主队列用来update UI
补充一点:如果在主线程中创建自定义队列(串行或者并行均可),在这个队列中执行同步任务,同样可以更新UI操作,主队列中可以更新UI,自定义队列也可以更新UI,但自定义队列的更新UI的前提是在主线程中执行同步任务
1.主线程并行队列同步执行
任务会在主线中执行,不会创建新的线程,并且是顺序执行的
2.主线程并行队列异步执行
任务会异步无顺序的执行,并且创建新的多个线程
3.主线程串行队列同步执行
主线程中 顺序执行 不会创建新的线程
4.主线程串行队列异步执行
只创建一个线程 顺序执行
5.主线程 主队列 同步执行
会导致死锁,程序卡死
6.主线程主队列异步执行
不会创建新的线程,但是却是异步的,先执行完队列中已经添加的任务,然后再执行队列中添加的 自定义任务