####1.什么是线程?什么是进程?两者的区别?什么是多线程?
(1)进程:所谓的进程就是我们所打开的一个正在执行的应用程序。一个进程至少有一个线程。
(2)线程:所谓的线程,是程序中一个单一的顺序控制流程。一个线程顺序执行一个任务。
(3)区别:进程之间的数据空间是相互独立的,有各自的数据空间,相互独立。而多个线程之间可以共享数据空间,所以多个线程使用一个数据空间,应考虑到数据的安全(可用锁)。
(4)多线程:就是cpu处理速度很快,计算机可以处理多条线程,操作系统可以让cpu同一时间处理多个线程,使多个线程之间快速切换,才让cpu看着有同时处理多线程的能力。其实就是每个线程有它自己的时间片,当它的时间片到了,cpu就处理这条线程。时间一到,就会暂停这个线程再处理另一个线程。
####2.iOS多线程处理的方案
(1)pthread
一套C语言写的多线程处理解决方法,功能强大,可移植性高,但多线程的创建和开启都需要手动处理,并且线程的生命周期的处理,以及状态的切换也需要自己处理。所以使用比较困难。
pthread_create(<#pthread_t _Nullable *restrict _Nonnull#>, <#const pthread_attr_t *restrict _Nullable#>, <#void * _Nullable (* _Nonnull)(void * _Nullable)#>, <#void *restrict _Nullable#>)
第一个参数:指向线程标识符的指针,C 语言中类型的结尾通常 _t/Ref,而且不需要使用 * 第二个参数:用来设置线程属性 第三个参数:线程运行函数的起始地址 第四个参数: 运行函数的参数
(2)NSThread
是苹果封装的一套面向对象的多线程解决方案。使用比较方便和简单。
但是还是需要手动管理线程的生命周期,处理线程同步等问题。而且一些复杂的多线程技术并没有封装。主要用于线程的简单的调试
NSThread * thread = [[NSThread alloc]initWithTarget:self selector:@selector(letRun) object:nil]; [thread start];
线程取消
[th cancel];
获取当前线程
[NSThread currentThread];
获取主线程
[NSThread mainThread];
线程暂停多长时间或者暂停刀某个时间
[NSThread sleepUntilDate:<#(nonnull NSDate *)#>];
[NSThread sleepForTimeInterval:<#(NSTimeInterval)#>];
线程停止
[NSThread exit];
(3)GCD
GCD(Grand Central Dispatch,大中央调度池) 是Apple开发的一个多核编程的较新的解决方法。它主要用于优化应用程序以支持多核处理器以及其他对称多处理系统。它是一个在线程池模式的基础上执行的并行任务。
》1.同步串行,不开新线程,在当前线程顺序执行,一个一个执行。
》2.同步并发,不开新线程,在当前线程顺序执行,一个一个执行。
》3.异步串行, 不在当前线程,开起一条线程,顺序执行。
》4.异步并发,不在当前线程,开多条线程,一起执行。
注意 同步,表示立马执行这个任务,立马将任务加入到队列中
(4)NSOperation