多任务系统调度
每个应用程序由操作系统分配的短暂的时间片(Timeslice)轮流使用CPU,由于CPU对每个时间片的处理速度非常快,用户会感觉这些任务好像是同时执行
并发:多个任务在同一段时间内同时执行,但在一个时间点,一个CPU只能执行一个任务。
进程与线程
进程
正在运行的程序,负责程序的内存分配
每一个进程都有自己独立的虚拟内存空间
线程
线程是进程中一个独立执行路径(控制单元)
一个进程中至少包含一条线程,即主线程
可以将耗时的执行路径(如:网路请求)放在其他线程中执行
进程与线程的区别:
进程是分配资源的最小单位,线程是处理器调度的最小单位
创建线程的目的:
为了开启一条新的执行路径,运行指定的代码,与主线程中的代码实现同时执行。
在iOS应用中,主线程的栈区控件为1M,子线程的栈区为512K
多线程开发简介
优势
1)充分发挥多核处理器的优势,将不同线程任务分配给不同的处理器,真正进入“并行计算”状态。
2)将耗时的任务分配到其他线程,由主线程负责更新界面,使应用程序运行更加流畅,用户体验更好。
3)当硬件处理器的数量增加时,程序运行更快,代码无需调整
弊端 :新建线程会消耗内存空间和CPU时间,线程太多会降低系统运行性能。
误区 :
1)多线程技术是为了并发执行多项任务,不会应用程序的执行效率。
2)算法的设计、优化,是提高程序执行效率的方案。
iOS开发中用到的线程技术
iOS本质上是Unix系统,可以支持pthread线程库,但并不推荐
iOS中进行多线程的操作,管理方式是“线程池”
线程池中的关键元素:线程调度中心、任务队列。
线程调度中心:负责创建线程、从任务队列取出并分配任务的执行。
任务队列:存储需要多线程执行的任务。
对于开发人员,想要实现多线程的任务,只需要向指定的任务队列放入任务即可,线程调度中心会分配并自动去执行这些任务。
iOS开发中常用的线程技术包括:
1)NSObject提供了的多线程方法
建立线程非常方便,但对线程管理很难实现,不推荐
2)GCD —— Grand Central Dispatch 大中心调度
基于C语言的API,相对底层。使用BLOCK定义任务行为,使用起来简单灵活
3)NSOperation
基于GCD实现的一套Objective-C的面向对象接口,且提供了一些GCD不容易实现的特性
NSThread
描述了一个线程对象,线程对象不需要我们去创建,而是由任务队列负责创建及管理
通过线程对象,可以获得线程的状态信息
获得当前的线程对象:
+ (NSThread *)currentThread
使用%@打印线程对象,能够查看到线程的一些信息
线程睡眠方法:
+ (void)sleepForTimeInterval:(NSTimeInterval)ti
当前线程终止方法:
+ (void)exit
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。