iOS多线程的七大对象理解
iOS多线程里,这七个对象,1进程,2线程,3同步函数,4异步函数,5并行队列,6串行队列,7主线程主队列
可以说是几个非常核心的概念,动代码之前,理解这几个概念的区别和联系是非常重要的
@2017-1月
1用面向对象的观点去理解,进程和线程,同步和异步,并行和串行,还有主线程的主队列,七者关系
进程:程序不运行时就是一堆代码,运行时就是一堆的进程的组合,进程是程序运行的基本单位。
线程:线程是进程的构建对象,
同步:不开新线程,一个任务接一个任务执行 (使用syn函数,一个人做事)
异步:开新线程,多个线程分别做不同的任务 (使用asyn函数,多人做事)
串行:串行要用串行队列,
1如果同步串行,没有开启新线程,串行执行任务
2如果异步串行,开启了新线程,串行执行任务
规律:串行队列永远是串行执行,如果异步只是开了个新线程而已,不过也达到了分任务作用。
并行:并行最好用全局并行队列
1如果同步并行, 没有开启新线程,串行执行任务
2如果异步并行,有开启新线程,并行执行任务
规律:并行只有使用异步操作才能实现并行,否则白搭。
主队列:
1如果同步执行,会死锁 (和主线程自己的任务死锁了,cpu不知道该选谁进行执行了)
2如果异步执行,没有开启新线程,串行执行任务,但是会等到主线程空闲时执行耗时任务,也达到了分任务作用
特点:1不会造成UI卡顿,因为不是让耗时任务,去抢UI操作的资源,而是等主线程其他所有事做完了,
比如UI操作,再去执行耗时任务,比如网络请求这些活。
2进程包含线程,线程包含队列 (串行队列,并发队列)
3多线程的意义在于不让主线程去做耗时操作
即使要做,也要等到主线程空闲后再做,这样就不会造成UI卡顿
4同步和异步:指的是能否开启新的线程。同步不能开启新的线程,异步可以。(是否开启新的跑道)
串行和并行:指的是任务的执行方式。串行是指多个任务时,各个任务按顺序执行,(是否多任务并列走)
完成一个之后才能进行下一个。并行指的是多个任务可以同时执行。异步是多个任务并行的前提条件