iOS --- 多线程

进程, 线程

进程,线程,一字之差,截然不同 。

进程:以iOS App来说,开启一个App, 就是开启一个进程,如开启微信,QQ, 优酷,爱奇艺等等,杀死进程,就是关闭已开启的App.

线程:每个App至少有一个线程(主线程),进程开启时就已存在,其他的异步线程不一定有。 以下提供对应的比喻。

多线程:校园的100米共4条跑道,4个人各占一跑道,互不影响。

单线程:一个柜员机操作,一次只能一人操作。

同步线程:当前只有一条线程,线程完成一个任务/操作后,才返回当前线程,继续下一下任务/操作。

异步线程:不同的任务/操作不会受影响,会开启其它线程。

队列:

并行队列:

分2种情况:同步,异步

同步:不开启新线程,一个任务/操作完成后,再执行下一个

以下例子, 创建并行队列,队列中包含3个同步线程,未开启线程,都是在主线程完成。

一个任务完成再到另一个任务

iOS --- 多线程_第1张图片


iOS --- 多线程_第2张图片

异步:不等待,开启新线程同时处理其它任务/操作

以下例子:并行异步

3个异步分别开启线程,number分别是3,4,5,任务完成的顺序不是从前到后,也不是先执行完毕一个循环后,再操作下一个线程。各自不影响

iOS --- 多线程_第3张图片


iOS --- 多线程_第4张图片

串行队列:

分2种情况:同步,异步

同步:不开启新线程,一个任务/操作完成后,再执行下一个

异步:存在2条线程,一条主线程,一条新开启线程,一个任务/操作完成后,再执行下一个

串行队列中加入线程,无论异步,同步顺序如何,都是一个任务/操作完成后,再执行下一个。

异步async,会开启新线程,同步sync一直在主线程main上。

iOS --- 多线程_第5张图片


iOS --- 多线程_第6张图片

主队列

iOS当中还有一个特殊的串行队列--主队列, 这个主队列中运行着一条特殊的线程 --主线程

主线程又叫UI线程,

作用: 及时处理UI,只有主线程有处理UI的能力(备注: 其他的耗时间的操作我们就放在子线程(也就是开辟线程)去执行,开线程也会占据一定的内存的,所以不要同时开启很多的线程。 )

主队列同步会卡死:

同步函数与主队列的特点

同步函数 dispatch_sync : 立刻执行,并且必须等这个函数执行完才能往下执行

主队列特点:凡是放到主队列中的任务,都会放到主线程中执行..如果主队列发现当前主线程有任务在执行,那么主队列会暂停调度队列中的任务,直到主线程空闲为止

综合同步函数与主队列各自的特点,不难发现为何会产生死锁的现象,主线程在执行同步函数的时候主队列也暂停调度任务,而同步函数没有执行完就没法往下执行…

iOS --- 多线程_第7张图片

主队列+异步:

无论有多少个异步,都在主线程执行

iOS --- 多线程_第8张图片
iOS --- 多线程_第9张图片
iOS --- 多线程_第10张图片

你可能感兴趣的:(iOS --- 多线程)