多线程 基础概念
引言:
# 一. 基础知识
# 1. 进程是什么?
是指在系统中正在运行的一个 应用程序。
进程之间是相互独立的, 每一个进程都有一块独立的内存空间, 之间互相不干扰。
# 2. 线程是什么?
每一个进程中,必须至少有一个线程, 没有线程 程序就无法运行。
是程序执行流的最小单元。线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源。
# 3. 多线程是什么?
是指从软件或者硬件上实现多个线程并发执行的技术。
# 4. 什么是串行?
是指的我们从事某项工作时一个步骤一个步骤的去实施。
# 5. 什么是并行?
一组程序按独立异步的速度执行,不等于时间上的重叠(同一个时刻发生)。
# 6. 线程概念
- **主线程:**UI线程,显示、刷新UI界面,处理UI控件的事件
- **子线程:**后台线程,异步线程
# 7. 多线程的原理
- 在同一时间, CPU只能处理一条线程, 只能有一条线程 在进行工作.
- 多线程的并发执行实际上是, CPU在多个线程之间快速的调度(切换).(但比一定按照顺序调度)
- 比如说: 在线程a执行0.1秒, 然后切换到线程b执行0.1秒, 然后切换到线程c执行0.1秒, 再 回到线程a 继续执行 , 依次循环, 直到结束.
- 如果线程之间调度的足够快, 就会造成多条线程并发执行的假象.
# 8. 多线程的优点
- 能够适当的提高程序的执行效率
- 能够适当的提高资源的利用率(CPU, 内存利用率)
# 9. 多线程的缺点
- 开启线程需要占用一定的内存空间, 一般情况, 一个主线程占用1M, 子线程占用512KB. 开启线程越多, 就会占用大量的内存, 降低程序的性能.
- 线程越多, CPU在线程间调度的开销就越大. CPU消耗就越大.
- 程序的设计会更加复杂: 线程间的通信, 线程间的数据共享等等.
# 10. 多线程的注意点
- 不要同时开太多的线程(1~3条线程即可,不要超过5条)
- 不要把耗时的操作放在主线程,要放在子线程中执行
# 11. 开启线程非常多, 会造成
- CPU 会在 N条线程之间调度(切换), CPU会累死, 会消耗大量的CPU资源.
- 每条线程被调度执行的频率会降低, 会影响线程的的执行效率.
- 线程切开且珍惜, 不要开太多, 3 - 5条就好.
# 二. 线程中任务的执行方式
# 1. 串行队列:
串行队列: 一个 线程 中的任务是串行执行.
如果在一个线程中执行多个任务, 只能一个一个的任务按顺序去执行. 在 同一段时间内 , 一个线程 只能执行一个任务.
例子: 只有下载完a 才能下载b:
# 2. 并行队列:
并行队列: 一个进程 可以开启多条线程, 每条线程并行(同时)执行不同的任务 。一个 进程 中的多个线程是并行执行的.