线程调度:你的电脑能同时做多少件事?

线程 vs 进程

在进入正题之前,我们先来了解一下什么是线程。

线程是进程的执行路径,而进程就像是一个软件。如果一个进程里一个线程都没有了,那表示要执行的事情一件都没有了,那么这个进程也就马上要被关闭掉了。因此,我们先来详细介绍一下进程。

进程

进程可以简单理解为拥有独立内存空间的应用程序。

  • 指一个内存中运行的应用程序,每个进程都有一个独立的内存空间(可以理解为每个进程都有自己的堆、栈,并且是互不共享的)。

  • 通常认为一个进程就是一个独立在做某件事情的软件(不过现在很多软件都是多进程的)。

线程

  • 是进程中的一个执行路径,多个线程之间共享一个内存空间(每个线程都拥有自己独立栈空间共用一份堆内存),线程之间可以自由切换,并发执行。一个进程最少有一个线程
  • 线程实际上是在进程基础之上的进一步划分,一个进程启动之后,里面的若干执行路径又可以划分 成若干个线程
  • 所谓的多线程,就是指在一个程序的进程中开辟多个执行路径。

你的电脑能同时做多少件事?

  1. 打开计算机管理

在这里插入图片描述

  1. 打开设备管理器–>处理器

在这里插入图片描述
可以看到,图片所示的电脑共有12个处理器。图片所示的电脑的CPU型号为i7-8750H,该CPU为6核处理器,6核分了12线程,这12个线程相当于12个大脑,按理说只能同时做12件事情。

但是,打开任务管理器–>性能:
在这里插入图片描述
可以看到,该电脑此时正在运行的有近4000个线程,可是我们明明只有12个“大脑”,这是怎么做到的呢?这就是线程调度的功劳。

为了能使计算机在只有有限个“大脑”的情况下,不卡顿地执行更多的线程,线程调度为计算机的“大脑”们提供了两种分配机制,即两种线程调度机制。

线程调度的两种机制

分时调度

所有线程轮流使用 CPU 的使用权,平均分配每个线程占用 CPU 的时间。

  • 即,把12个脑子的时间均分,有多少线程就均分成多少份,每个线程轮流使用。虽然是多线程,但是电脑始终是一个脑子只能同时干一件事。多线程只是为了让多条执行路径能均分,能更合理地交替执行。
  • 所以早期的电脑(比如DOS系统)一旦中了病毒,非常可怕。因为它只能去执行病毒,执行不了其他的,连鼠标键盘都动不了。
  • 而所谓的线程调度,就是因为后续出现了一些多进程的操作系统(比如Windows),它们更合理地把一个计算机的时间切成n份,给各个软件轮流使用,造成多个软件同时在走的假象,本质上还是一次只同时做一件事,只是切换的很快而已。

抢占式调度(Java中使用的调度机制)

  • 优先让优先级高的线程使用 CPU,如果线程的优先级相同,那么会随机选择一个(线程随机性), Java使用的就是 抢占式调度

    • Win10设置线程优先级的方法:任务管理器–>详细信息—>选中线程—>右键—>设置优先级。

    • 在这里插入图片描述

    • 优先级越高,抢到的时间片(CPU分出来的一个个时间)的概率越大。谁抢到谁执行。当CPU空闲后,会主动抛出一个极短的时间片,由各个线程争抢,哪个线程拿到,就执行哪个线程的路径的事情。

      • 时间片的概念是什么? by 卡图卢斯 [1]
        时间片即CPU分配给各个程序的时间,每个线程被分配一个时间段,称作它的时间片,即该进程允许运行的时间,使各个程序从表面上看是同时进行的。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。而不会造成CPU资源浪费。在宏观上:我们可以同时打开多个应用程序,每个程序并行不悖,同时运行。但在微观上:由于只有一个CPU,一次只能处理程序要求的一部分,如何处理公平,一种方法就是引入时间片,每个程序轮流执行。

  • CPU使用抢占式调度模式在多个线程间进行着高速的切换。对于CPU的一个核新而言,某个时刻, 只能执行一个线程,而 CPU的在多个线程间切换速度相对我们的感觉要快,看上去就是在同一时刻运行。 其实,多线程程序并不能提高程序的运行速度能够提高程序运行效率让CPU的使用率更高

    • 比如把计算机的一秒比作人的一年,这一年干了旅游、回家、结婚等好几件事,但是这几件事并不是同时完成的,而是某几天做某一件事。
    • 轮流做和穿插着做其实并不会缩短整体时间,只是会提高效率。比如,等待用户输入和执行相应操作,就可以有一个线程专门等着接收输入,有一个线程专门等着执行,提高CPU使用率。
    • 事实上,反而“排队做事”比“同时做事、期间来回切换”所用的时间更少,因为省去了来回切换所用的时间。
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页