线程定义
- 线程是进程内部的一个执行单元
- 线程是系统独立调度和分配的基本单位
- 每个进程,至少有一个主线程,由系统自动创建
为什么使用多线程
例 1
界面上点击某个按钮后,需要执行一个非常耗时的操作,如果不使用多线程,就只能傻等操作返回。
使用多线程,点击按钮之后,开辟1个新线程后台去执行这个耗时操作,前台界面继续执行其他菜单目录,录入数据等。
例 2
有个操作,1个线程需要20分钟完成,现在的多核cpu,可以真正同一时刻运行多个线程。
假设是双核cpu,同一时刻运行2个线程,操作就只需要10分钟可以完成。
多线程优点
- 提高应用程序执行效率。【例1】
- 提高cpu利用率。【例2】
多线程缺点
- 占用内存,耗费cpu时间进行跟踪。
- 访问共享资源相互影响,程式代码控制难度大。
问自己
- 新开辟的线程,肯定需要内存吧?
- 多个线程之间需要切换吧?切换需要占用cpu来计算吧?
- 多个线程的执行顺序,是无法确定的,当他们都需要访问相同的变量、文件时,需要对这个变量、文件做同步处理吧?
线程的数量
理想的,线程数量 = cpu核心数量
超线程
利用硬件指令,把1个物理cpu核心内部的2个逻辑内核,模拟成2个物理核心。
通俗点就是1个cpu变2个cpu了,这时候,同一时刻,就可以2个线程真正的同时运行。
多核处理器
就是cpu本身,就有2个或多个物理核心(比如:双核,四核)。硬件本身就是可以同一时刻跑2个或多个线程。同一时刻,1个cpu核心只会让1个线程使用。
如果有多个线程,那肯定需要切换,这个切换也是必要的,不然就会导致傻等的问题。 这里,我们只要明白,一个时刻,1个cpu核心,只会让1个线程使用。
线程的执行顺序
多个线程,执行顺序,是无法确定的。
这个问题 主要是操作系统Windows是抢占式管理,谁抢到cpu,cpu就帮你干活。
不过cpu计算非常的快,这次没抢到cpu,那就等下次呗,操作系统Windows也不会让线程饿死的。
理解同一时刻
多个线程同时运行并不一定是同一时刻!
1个cpu核心,同一时刻,只会有一个线程运行。
多核心cpu,超线程,同一时刻,可以真正同时运行多个线程。
同时,同一时刻
我们通常认为的,电脑同时运行多个程序,同时执行多个任务。
这个【同时】并不是真正意义的【同一时刻】。
多个程序,多个任务是否同一时刻运行,要看硬件cpu的处理能力。
cpu计算非常的快,多个线程轮询cpu执行各自的操作。线程切换频率很快,我们的感觉是多个线程同时运行。
要想多个线程【同一时刻】运行,那就需要多个cpu核心。
比如,采用超线程,多核心处理器,同一时刻可以真正运行,2个线程,8个线程,16个线程等。
完。