进程, 线程
进程,线程,一字之差,截然不同 。
进程:以iOS App来说,开启一个App, 就是开启一个进程,如开启微信,QQ, 优酷,爱奇艺等等,杀死进程,就是关闭已开启的App.
线程:每个App至少有一个线程(主线程),进程开启时就已存在,其他的异步线程不一定有。 以下提供对应的比喻。
多线程:校园的100米共4条跑道,4个人各占一跑道,互不影响。
单线程:一个柜员机操作,一次只能一人操作。
同步线程:当前只有一条线程,线程完成一个任务/操作后,才返回当前线程,继续下一下任务/操作。
异步线程:不同的任务/操作不会受影响,会开启其它线程。
队列:
并行队列:
分2种情况:同步,异步
同步:不开启新线程,一个任务/操作完成后,再执行下一个
以下例子, 创建并行队列,队列中包含3个同步线程,未开启线程,都是在主线程完成。
一个任务完成再到另一个任务
异步:不等待,开启新线程同时处理其它任务/操作
以下例子:并行异步
3个异步分别开启线程,number分别是3,4,5,任务完成的顺序不是从前到后,也不是先执行完毕一个循环后,再操作下一个线程。各自不影响
串行队列:
分2种情况:同步,异步
同步:不开启新线程,一个任务/操作完成后,再执行下一个
异步:存在2条线程,一条主线程,一条新开启线程,一个任务/操作完成后,再执行下一个
串行队列中加入线程,无论异步,同步顺序如何,都是一个任务/操作完成后,再执行下一个。
异步async,会开启新线程,同步sync一直在主线程main上。
主队列
iOS当中还有一个特殊的串行队列--主队列, 这个主队列中运行着一条特殊的线程 --主线程
主线程又叫UI线程,
作用: 及时处理UI,只有主线程有处理UI的能力(备注: 其他的耗时间的操作我们就放在子线程(也就是开辟线程)去执行,开线程也会占据一定的内存的,所以不要同时开启很多的线程。 )
主队列同步会卡死:
同步函数与主队列的特点
同步函数 dispatch_sync : 立刻执行,并且必须等这个函数执行完才能往下执行
主队列特点:凡是放到主队列中的任务,都会放到主线程中执行..如果主队列发现当前主线程有任务在执行,那么主队列会暂停调度队列中的任务,直到主线程空闲为止
综合同步函数与主队列各自的特点,不难发现为何会产生死锁的现象,主线程在执行同步函数的时候主队列也暂停调度任务,而同步函数没有执行完就没法往下执行…
主队列+异步:
无论有多少个异步,都在主线程执行
网友评论