首先我们先整理几个概念。ps: 都是个人的想法很多地方有些不对,在慢慢修改吧,这应该是一个认识的过程。所以这里很多东西也许是错的,大家自己验证就好
进程;一个程序有一个进程,我们可以简单的理解一个APP在运行的时候,就对应了一个进程。
线程:是程序运行的一个东西。网上给的定义是程序运行的最小单元。
当一个程序运行了,那么他就一定有一个线程在我们iOS中叫做主线程,我们所做的操作默认都是在这个主线程里的。
线程中有一个runloop简单点说就是一个死循环,有了这个是循环才能保证我这个程序一直存在不然,就和我们使用playground写代码或者写简单的c方法一样运行完代码就结束了。
说回多线程 :多线程分成两种情况真的多线程和假的多线程,这个东西和cpu有关(太远了我们不说)。我们都是假的多线程。
什么是假的多线程,举个例子有两条线程,每条线程中都有10条处理,额10个nslog语句这样比较好理解。那么他们运行是应该是什么样子呢? 如果不明白的话可能会说两个一起在执行。其实不是他们一一段一段的被执行只是两者之间切换太快我们察觉不错来。
以上是我对于多线程的理解。下面我们说说IOS中最常用的多线程GCD
说GCD我们就要说一个东西Queue队列,我们做的操作都是对队列进行操作。
队列有两种,一种是串行队列,一种是并行队列
1.串行队列是指队列只有一条线程,我们加入的代码都是顺序执行的。
2.并行队列是指队列会有多条线程,我们没加入一个代码块都可能创建一个新的线程。
怎么说可能呢? 因为在使用GCD时会让我们选择是async(异步)或者sync(同步).当你使用同步是那么它的执行就是顺序的而且使用的线程是你当前的线程。使用异步时才会每一段代码开辟一个线程。
3.上面说的sync(同步) 没什么好说的了,都是把代码加入到当前的线程中按顺序执行的。
4.async(异步): 和当前线程不是同一个线程,你使用串行队列,就会新开一条线程。使用并行队列就可能是多开很多条线程。