1.先了解什么是进程和什么是线程
1.1什么是进程(process)
进程是指在系统中正在运行的一个应用程序
每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内
比如同时打开迅雷、Xcode,系统就会分别启动2个进程
1.2什么是线程(thread)
- 1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程)
- 一个进程(程序)的所有任务都在线程中执行
- 比如使用酷狗播放音乐、使用迅雷下载电影,都需要在线程中执行
- 线程的串行
- 1个线程中任务的执行是串行的。
- 如果要在1个线程中执行多个任务,那么只能一个一个地按顺序执行这些任务。
- 也就是说,在同一时间内,1个线程只能执行1个任务。
- 比如在1个线程中下载3个文件(分别是文件A、文件B、文件C)。
2.什么是多线程(multithread)
2.1什么是多线程
- 1个进程中可以开启多条线程,每条线程可以并行(同时)执行不同的任务
进程à车间,线程 à车间工人
多线程技术可以提高程序的执行效率
比如同时开启3条线程分别下载3个文件(分别是文件A、文件B、文件C)
2.2多线程的原理
多线程的原理
同一时间,CPU只能处理1条线程,只有1条线程在工作(执行)
多线程并发(同时)执行,其实是CPU快速地在多条线程之间调度(切换)
如果CPU调度线程的时间足够快,就造成了多线程并发执行的假象
-
思考题:如果线程非常非常多,会发生什么情况??
- CPU会在N多线程之间调度,CPU会累死,消耗大量的CPU资源
- 每条线程被调度执行的频次会降低(线程的执行效率降低)
2.3多线程的潜在优势
- 多个线程可以 高应用程序的感知响应。
- 多个线程可以 高应用程序在多核系统上的实时性能。
2.4多线程潜在问题
- 应用程序内拥有多个可执行路径,会给你的代码增加更多的复杂性。
- 因为应用程序内的多个线程共享内存空间,它们访问相同的数据结构。如果两个线程试图同时处理相同的数据结构,一个线程有可能覆盖另外线程的改动导致破坏该数据结构。