iOS多线程概要

来源:互联网 发布:大连爱知时计科技 编辑:程序博客网 时间:2024/05/16 14:00
目的

多线程最主要的目的是将耗时的操作放在后台处理,保证UI界面的正常显示与交互.

例如: 网络访问都是耗时操作, 所以在做网络开发时, 需要在后台线程中执行.

多线程基本概念

同步 & 异步

进程 & 线程

同步 & 异步

同步:
一个人要出去买水跟买烟:
因为只有他自己一个, 所以只能 先买水后买烟 或者 先买烟后买水.

流程: 早上10点开始出去买水–>10点10买完水–>10点10开始往买烟的地方走–>10点30买好烟并回去.
总耗时: 买水跟烟分别用了10、20分钟, 总共用了10 + 20 = 30分钟

异步:
多个人同时出去买菜:
有多个人所以可以分头行动, 各自买完然后各自自己回去.

流程:
早上10点小明、小红、小东同时分别出去买肉、蔬菜以及大米, 分别用了10、20、25分钟.
1.小明10点出去买肉花了10分钟, 10点10分回来了;
2.小红10点出去买蔬菜花了20分钟, 10点20分回来了;
3.小东10点出去买大米花了25分钟, 10点25分回来了;
总耗时: 三人中花时间最大的那个, 也就是小东用时: 25分钟

进程 & 线程

  1. 进程
    在系统中正在运行的一个应用程序叫进程.
    如: 正在运行的QQ就是一个进程

  2. 线程
    1) 线程是进程的基本执行单元, 1个进程中可以有多个线程, 进程中的所有任务都在线程中执行.
    2) 程序启动(进程开启)会默认开启一条线程, 叫主线程mainThread.
    3) 进程要想执行任务,必须要有线程,且每个进程至少有一条线程.
    如: QQ发送消息就是在一条线程上完成的

主线程

一个程序运行后,默认会开启1个线程,称为主线程或UI线程.
主线程一般用来刷新UI界面,处理UI事件( 点击、滚动等事件 ).

注意点: 不能将耗时的操作放到主线程中, 耗时操作会使主线程卡顿, 严重影响UI的流畅度, 给用户一种卡的坏体验, 影响UI交互质量.

多线程
一个进程中可以开启多条线程,多条线程可以 同时 执行不同的任务.
多线程可以解决程序阻塞的问题, 提高程序的执行效率, 给用户良好的使用体验.
如: 音乐软件可以边下载变听歌
多线程执行原理

本质上, 单核CPU同一时间, CPU只能处理1个线程, 也就是说只有1个线程在执行任务.
多线程, 其实是一种假象, 它其实是CPU在多条线程之间快速切换( 调度任务 ). 如果CPU调度线程的速度足够快, 就造成了多线程 同时 执行的 假象

如: 一共有三条线程: thread1、thread2、thread3

CPU在0.0001s执行了thread1
CPU在0.0002s执行了thread1
CPU在0.0003s执行了thread3
CPU在0.0004s执行了thread1
CPU在0.0005s执行了thread2
CPU在0.0006s执行了thread2
CPU在0.0007s执行了thread1
CPU在0.0008s执行了thread3
CPU在0.0009s执行了thread1

而0.0001s肉眼是反应不过来的, 这就造成了CPU在同时执行多个线程的假象

多线程的优缺点

优点:
1) 把耗时操作放在子线程中执行, 在一定程度上提高程序的执行效率, 避免因耗时操作造成的卡顿现象. 从而提升用户体验度
2) 无论何时, 一个程序只要没被杀死, 那这个程序就肯定占用不玩CPU跟内存的资源, 而开几条线程执行任务能在一定程度上提高CPU及内存的使用率
缺点
1) 默认情况下, 子线程512KB, 主线程1M. ( PS:iOS8之后, 主线程512KB. ). 如果开启的线程过多,会占用大量的CPU资源,降低程序的性能
2) 线程越多,CPU调度线程的开销就越大.
时间开销( CPU切换线程需要消耗时间 )
空间开销( 线程在内存中要占用512KB内存空间 )
3) 程序设计更加复杂: 比如线程之间的通信, 多个线程中共享数据的安全性
原创粉丝点击