一、概述
首先,我们先假设大家都对线程有初步的了解。那么我们都知道NSThread底层其实是调用的C语言中POISIX(可移植操作系统接口)框架下的pthread来实现线程控制的。
1.多线程基本原理
线程都是CPU来调度的,而(单核中)CPU同一时间是只能对一条线程进行操作。而我们所看到的多个线程同时运行其实是一种假象。真实的情况是CPU及其快速的切换多条线程,造成了我们看到多线程“同步”执行的假象。
2.NSThread 和 pthread,GCD 和 NSOperation
NSThread是对pthread的高度封装,使用了更加面向对象,更加简单易用的方式,使我们用起来更加的方便。
而我们需要注意一点,就是在OC开发中,只有NSThread和pthread是真正的多线程操作。GCD 和 NSOperation并不是真正的线程操作(不是真正的线程操作,但是属于多线程技术,是不是很拗口)。NSOperation是基于GCD的封装,比GCD更加简单实用。而GCD的底层是充分利用设备的多核技术,旨在替换NSThread。(GCD和NSOperation将在下一篇文章中充分讲解,这里只做简单了解)
3.线程的状态
我认为线程的状态有这么五种情况:新建状态,就绪状态,运行状态,阻塞状态,死亡状态(这里可能会有歧义,我将其他的多种状态也进行了合并,如等待状态、锁池状态等)。他们的关系如下图所示:
而我们常说的加锁方式其实是将多条线程以串行的方式来执行。(这里补充,就是单条线程中,所有的调用都是以串行的方式执行的。就像我们常遇到的这种情况:点击屏幕好几个位置没反应,然后过了一段时间各种界面就开始跳了。其根源就是线程在执行耗时操作,我们的点击操作被排到了后面执行)。如图: