一 单线程概述
每个正在运行的程序(即进程)至少包含一个线程,这个线程是主线程.
主线程在程序启动时被创建,用于执行main函数.
只有一个主线程的程序被称为单线程程序.主线程负责执行程序所有的代码(UI刷新,网络请求,数据加载),这些代码只能顺序执行,不能并发执行.
二 多线程概述
拥有多个线程的程序被称为多线程程序.
iOS允许用户自己开辟线程,相对于主线程而言,这些线程被称为子线程.
子线程与主线程都是独立运行的单元,相互不影响,所以可以并发执行.
三 单线程&多线程区别
单线程程序只有一个线程,所以代码顺序执行,容易出现代码阻塞(页面假死)等状态.
多线程程序各个线程独立执行,能有效避免代码阻塞,并提高程序运行性能.
注意:UI添加和刷新必须在主线程执行.
在 iOS 中其实目前有 4 套多线程方案,他们分别是:
<pre>
</pre>
<pre>
-
Pthread
是这四套线程中最垃圾的一套方法,我们也可以直接忽略它,在我们开发中根本就遇不到。简单地说,这是一套在很多操作系统上都通用的多线程API,所以移植性很强(然并卵),当然在 iOS 中也是可以的。不过这是基于c语言的框架. -
NSThread
这套方案是经过苹果封装后的,并且完全面向对象的。所以你可以直接操控线程对象,非常直观和方便。但是,它的生命周期还是需要我们手动管理,所以这套方案也是偶尔用用,比如 [NSThread currentThread],它可以获取当前线程类,你就可以知道当前线程的各种属性,用于调试十分方便。 -
GCD
全称是Grand Central Dispatch,实际在我们开发过程中用到多线程中用到最多的是GCD了,它是苹果为多核的并行运算提出的解决方案,所以会自动合理地利用更多的CPU内核(比如双核、四核),最重要的是它会自动管理线程的生命周期(创建线程、调度任务、销毁线程),完全不需要我们管理,我们只需要告诉干什么就行。同时它使用的也是 c语言,不过由于使用了 Block(Swift里叫做闭包),使得使用起来更加方便,而且灵活。 -
NSOperation和NSOperationQueue
NSOperation 是苹果公司对 GCD 的封装,完全面向对象,所以使用起来更好理解。 大家可以看到 NSOperation 和 NSOperationQueue 分别对应 GCD 的 任务 和 队列 。操作步骤也很好理解:
将要执行的任务封装到一个 NSOperation 对象中。
将此任务添加到一个 NSOperationQueue 对象中。
然后系统就会自动在执行任务。至于同步还是异步、串行还是并行请继续往下看:
</pre>
好处:
1、使用线程可以把程序中占据时间长的任务放到后台去处理,如图片、视频的下载
2、发挥多核处理器的优势,并发执行让系统运行的更快、更流畅,用户体验更好
缺点:
1、大量的线程降低代码的可读性,
2、更多的线程需要更多的内存空间
3、当多个线程对同一个资源出现争夺的时候要注意线程安全的问题。
网友评论