iOS 多线程的解决方案
2015-11-04 11:54
281 查看
多线程这个概念并不是iOS中所特有的,在很多开发平台上都有提到过,可以看得出多线程是一门应用广泛且十分强大的技术。它不但提高了我们程序的执行效率,同时也为我们的节约了大量的cup的资源,使得我们设备运行的更为流畅,提供更好的用户体验。
而在iOS开发中,多线程更是必不可少的开发技术,首先它有比较明显的优势:
1. 能适当提高程序的执行效率
2. 能适当提高资源利用率(CPU、内存利用率)
当然多线程也并不是万能的,它也有一些不足:
1. 开启线程需要占用一定的内存空间(默认情况下,主线程占用1M,子线程占用512KB),如果开启大量的线程,会占用大量的内存空间,降低程序的性能。
2. 线程越多,CPU在调度线程上的开销就越大。
3. 程序设计更加复杂:比如线程之间的通信、多线程的数据共享。
说到多线程的话,我们先要明确两个相关的概念,线程和进程。
进程: 指的是系统中正在运行的一个应用程序。每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内。例如,打开QQ和Xcode,系统就会分别启动两个进程。
线程: 它是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行,这就要求每一个进程至少要有一条线程。例如使用音乐播放器播放音乐,使用迅雷下载文件,这都需要在线程中执行。
那么多线程到底是什么呢?所谓多线程是指一个进程中可以开多条线程,每条线程可以并行(同时)执行不同的任务。用它能够提高程序的执行效率,因为它一般在耗时操作的时候会被调用,比如下载,上传等操作。它的原理实质上是cpu快速的在多条线程之间调度(切换),在同一时间cpu只能处理一条线程,只有一条线程在工作(执行),由于cpu调度线程的时候足够快,造成了多条线程并发执行的假象。
但是使用多线程技术并不是随心所欲的,如果增开的子线程过多,可能会导致cpu在多条子线程之间频繁的调度,大量消耗cpu的资源,每条子线程被调度执行的频次就会降低,线程的执行效率就会降低,那么就违背了多线程的初衷。
接下来让我们明确一些多线程中重要的概念,有助于我们更好的理解多线程这门技术并应用到我们iOS的开发中去。首先,明确主线程的概念和作用。
主线程顾名思义,就是最主要的线程,当一个iOS程序运行后,会默认开启一条线程,称为主线程或者UI线程。它的主要作用就是用来显示(刷新)UI界面,处理UI事件(如点击事件、滚动事件、拖拽事件等)。在明白主线程的作用之后我们自然就能想到在使用多线程的时候应该注意的事情,我们不应该把比较耗时的操作放到主线程中,因为这会导致我们的主线程卡住,严重影响到UI的流畅度,让用户觉得“卡”,用户体验差。
最后,我们应该来看看在iOS中应用多线程可以备选的方案有哪几种,具体的我们看一下下面的表就可以了。
而在iOS开发中,多线程更是必不可少的开发技术,首先它有比较明显的优势:
1. 能适当提高程序的执行效率
2. 能适当提高资源利用率(CPU、内存利用率)
当然多线程也并不是万能的,它也有一些不足:
1. 开启线程需要占用一定的内存空间(默认情况下,主线程占用1M,子线程占用512KB),如果开启大量的线程,会占用大量的内存空间,降低程序的性能。
2. 线程越多,CPU在调度线程上的开销就越大。
3. 程序设计更加复杂:比如线程之间的通信、多线程的数据共享。
说到多线程的话,我们先要明确两个相关的概念,线程和进程。
进程: 指的是系统中正在运行的一个应用程序。每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内。例如,打开QQ和Xcode,系统就会分别启动两个进程。
线程: 它是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行,这就要求每一个进程至少要有一条线程。例如使用音乐播放器播放音乐,使用迅雷下载文件,这都需要在线程中执行。
那么多线程到底是什么呢?所谓多线程是指一个进程中可以开多条线程,每条线程可以并行(同时)执行不同的任务。用它能够提高程序的执行效率,因为它一般在耗时操作的时候会被调用,比如下载,上传等操作。它的原理实质上是cpu快速的在多条线程之间调度(切换),在同一时间cpu只能处理一条线程,只有一条线程在工作(执行),由于cpu调度线程的时候足够快,造成了多条线程并发执行的假象。
但是使用多线程技术并不是随心所欲的,如果增开的子线程过多,可能会导致cpu在多条子线程之间频繁的调度,大量消耗cpu的资源,每条子线程被调度执行的频次就会降低,线程的执行效率就会降低,那么就违背了多线程的初衷。
接下来让我们明确一些多线程中重要的概念,有助于我们更好的理解多线程这门技术并应用到我们iOS的开发中去。首先,明确主线程的概念和作用。
主线程顾名思义,就是最主要的线程,当一个iOS程序运行后,会默认开启一条线程,称为主线程或者UI线程。它的主要作用就是用来显示(刷新)UI界面,处理UI事件(如点击事件、滚动事件、拖拽事件等)。在明白主线程的作用之后我们自然就能想到在使用多线程的时候应该注意的事情,我们不应该把比较耗时的操作放到主线程中,因为这会导致我们的主线程卡住,严重影响到UI的流畅度,让用户觉得“卡”,用户体验差。
最后,我们应该来看看在iOS中应用多线程可以备选的方案有哪几种,具体的我们看一下下面的表就可以了。
相关文章推荐
- Python3写爬虫(四)多线程实现数据爬取
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- Patrol 7 架构下?的处理方法
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 中病毒后常用的解决方法病毒终极解决方案
- C#实现多线程的同步方法实例分析
- QQ尾巴 InfoMs.Ime 解决方案
- 浅谈chuck-lua中的多线程
- C#简单多线程同步和优先权用法实例
- C#多线程学习之(四)使用线程池进行多线程的自动管理
- C#多线程编程中的锁系统(三)
- IE对CSS样式表的限制分析与解决方案
- C#多线程学习之(六)互斥对象用法实例
- 基于一个应用程序多线程误用的分析详解
- C#多线程学习之(三)生产者和消费者用法分析