概述:在iOS 中每一个运行中的应用都有唯一的一个进程,进程是运行在内存中的,每一个进程中都可以有多个线程用于处理不同的任务,其中比较特殊的一条线程叫做主线程也叫做UI线程(iOS中所有的UI更新相关的操作苹果都建议最好在主线程中进行)
内存—进程—线程关系图1.0 1个线程中任务的执行是串行的
1个线程中任务的执行是串行的,一条线程相当于一条单行道公路,每一个任务都相当于一辆汽车,任务A,B,C 按顺序串行执行,相当于汽车 A 先走过这段路,然后B才开始走,B走完 C才开始走,如下图
线程执行流程2.0 多线程技术由来
电脑最先开始的时候CPU只有一个,同一时间内一个1个CPU只能处理1条线程(当然现在的4核8线程之类的东西另算),随着CPU运算能力的不断增强, 为了提高CPU的利用率,加上人们同执行多个任务的需求,多线程技术应运而生。
一个CPU 同一时间只能执行一个线程的任务,而我们的线程可能有几十几百个,CPU是如何做到让这么多个线程 看起来是同时执行的呢?
其实CPU的多线程运行原理类似于同时做多件事情的人类,只不过他在各个事情之间切换的速度快的超乎想象而已,当CPU在线程之间切换的速度足够快的时候,就造成了多线程并发执行的假象。如下图 CPU 按照 1 到7的顺序进行切换执行
CPU多线程运行
3.0 多线程优缺点
优点
1.能适当提高程序的执行效率
2.能适当提高资源的利用率(CPU、内存利用率)
缺点
1.创建线程是有开销的,iOS下主要成本包括:内核数据结构(大约1kb)、栈空间(子线程512KB、主线程1MB,也可以用 - setStackSize:设置,但是必须是4k的倍数,而且最小是16KB),创建线程大约需要90毫秒的创建时间
2.CPU线程切换其实也是小号算力资源的,所以线程不是越多越好。
3.如果开启大量的线程,会降低程序的性能
4.程序设计更加复杂:比如线程之间的通信、多线程的数据共享
4.0 什么是主线程
iOS中每一个进程都会默认创建一条主线程又叫UI线程,
作用
显示\刷新UI界面
处理UI事件(比如 点击事件、滚动事件、拖拽事件等)
使用注意
别将比较耗时的操作放到主线程中,否则会阻塞主线程,导致UI操作卡顿现象,带来极其不好的用户体验如下图
耗时操作阻塞主线程在iOS 中有以下四种主要的方式 来达到多线程的效果
iOS 中四种主要的技术方案其中 pthread 和 NSThread 算是真正的多线程技术,NSOperation 是对 GCD的再封装 ,GCD 和NSOperation 是通过对队列的操作 并发来达到多线程的效果,这个之后会讲到。
注:多线程目的:将耗时操作放在后台,不阻塞UI线程! 在多线程开发中,不要相信一次的运行结果!!
网友评论