多线程 基础概念

引言:


# 一. 基础知识

# 1. 进程是什么?

是指在系统中正在运行的一个 应用程序。

进程之间是相互独立的, 每一个进程都有一块独立的内存空间, 之间互相不干扰。

# 2. 线程是什么?

每一个进程中,必须至少有一个线程, 没有线程 程序就无法运行。

是程序执行流的最小单元。线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源。

# 3. 多线程是什么?

是指从软件或者硬件上实现多个线程并发执行的技术。

# 4. 什么是串行?

是指的我们从事某项工作时一个步骤一个步骤的去实施。

# 5. 什么是并行?

一组程序按独立异步的速度执行,不等于时间上的重叠(同一个时刻发生)。

# 6. 线程概念

  1. **主线程:**UI线程,显示、刷新UI界面,处理UI控件的事件
  2. **子线程:**后台线程,异步线程

# 7. 多线程的原理

  1. 在同一时间, CPU只能处理一条线程, 只能有一条线程 在进行工作.
  2. 多线程的并发执行实际上是, CPU在多个线程之间快速的调度(切换).(但比一定按照顺序调度)
  3. 比如说: 在线程a执行0.1秒, 然后切换到线程b执行0.1秒, 然后切换到线程c执行0.1秒, 再 回到线程a 继续执行 , 依次循环, 直到结束.
  4. 如果线程之间调度的足够快, 就会造成多条线程并发执行的假象.

# 8. 多线程的优点

  1. 能够适当的提高程序的执行效率
  2. 能够适当的提高资源的利用率(CPU, 内存利用率)

# 9. 多线程的缺点

  1. 开启线程需要占用一定的内存空间, 一般情况, 一个主线程占用1M, 子线程占用512KB. 开启线程越多, 就会占用大量的内存, 降低程序的性能.
  2. 线程越多, CPU在线程间调度的开销就越大. CPU消耗就越大.
  3. 程序的设计会更加复杂: 线程间的通信, 线程间的数据共享等等.

# 10. 多线程的注意点

  1. 不要同时开太多的线程(1~3条线程即可,不要超过5条)
  2. 不要把耗时的操作放在主线程,要放在子线程中执行

# 11. 开启线程非常多, 会造成

  1. CPU 会在 N条线程之间调度(切换), CPU会累死, 会消耗大量的CPU资源.
  2. 每条线程被调度执行的频率会降低, 会影响线程的的执行效率.
  3. 线程切开且珍惜, 不要开太多, 3 - 5条就好.

# 二. 线程中任务的执行方式

# 1. 串行队列:

串行队列: 一个 线程 中的任务是串行执行.

如果在一个线程中执行多个任务, 只能一个一个的任务按顺序去执行. 在 同一段时间内 , 一个线程 只能执行一个任务.

例子: 只有下载完a 才能下载b:

# 2. 并行队列:

并行队列: 一个进程 可以开启多条线程, 每条线程并行(同时)执行不同的任务 。一个 进程 中的多个线程是并行执行的.