线程概念
2017-07-18 本文已影响2人
iOSser
同步:
- 任务按顺序执行, 有先后顺序, 执行完一个才能执行另一个任务, 任务有一个执行者
异步
- 有多个执行者同时执行多个任务
进程
- 一个正在运行的应用程序就是一个进程
- 每个进程之间是独立的, 每个进程都运行在它专有并且受保护的内存空间内
- 通过活动监视器可以看到系统中所开启的进程
线程
- 一个进程有多个线程组成(至少要有一个线程)
- 线程是进程的基本执行单元, 进程中的任务都是在线程中执行的
多线程
- 进程中的多个线程"同时"执行不同的任务
- 多线程可以解决程序的阻塞问题
- 合理的多线程可以提高程序的执行效率
为什么学习多线程
-
因为在执行耗时操作时如果放在主线程(UI线程)中, UI会卡顿, 影响用户交互!
-
循环速度非常快
-
操作内存的栈空间非常快
-
操作内存堆区有点慢
-
循环非常消耗CPU资源
-
I/O(输入/输出)速度非常慢
多线程的执行原理
-
单任务操作系统
应用只有进程没有线程(同一时间只能运行一个应用程序)
-
多任务操作系统
-
同一时间可以运行多个应用程序
-
(单核CPU) 同一时间, CPU只能处理一个线程, 只有一个线程在执行
-
多线程同时执行: 其实是CPU在多个线程之间的切换
-
因为CPU的调度时间足够快, 就造成多个先生"同时"执行的现象
-
如果线程非常多, 会消耗大量的CPU资源, 每个线程被调度的次数会减少, 线程的之执行效率就会降低
-
线程执行完任务后会自动销毁
-
每开一个线程需要占用一定的空间(默认512kb)
-
多线程技术方案
-
所属语言: C语言
一套统通用的多线程API 可跨平台使用 可移植 使用难度大
由程序员管理线程的生命周期 -
所属语言:OC
面向对象的线程使用方法
简单易用 可直接操作线程对象
由程序员管理线程的生命周期 -
GCD
旨在替代NSTread等线程技术
充分利用设备的多核
自动管理线程的生命周期 -
所属语言:OC
基于GCD(底层是GCD)
比GCD多了一些更简单使用的功能
使用更加面向对象 苹果推荐使用
自动管理线程的生命周期