进程、线程、协程... ... ——任务管理器的性能里都有什么?那么多的线程,进程、线程、句柄都是什么?

前言

基本每一个八股文都有“进程与线程的关系”,对于一名gopher来说,这个问题就变成了“进程、线程、协程的关系”,再加上gmp模型的相关问题,但对于此部分的了解也多来源于从。

自己之前一直熟知的线程,除了八股上的概念之外,就是我们攒机时说的“4C8T”这样的核心、线程。
但又有许多点,连起来看便觉得不清晰。

但今天电脑任务管理器中无意看到,自己的电脑中居然有这么茫茫多的线程。因此我知道我的理解还不清晰,所以需要去了解一下。
在这里插入图片描述

本文关键词:进程、线程、协程,句柄,用户级线程,内核级线程,物理核心、逻辑核心、超线程

八股文回顾

回顾一下八股文,其中 进程、线程、协程的概念及关系。
此部分参考自此链接,这个问题网上的文章已经很多了,都大同小异便仅引用。

概念

进程:进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。

线程:线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处理器调度和分派的基本单位。一个进程可以有一个或多个线程,各个线程之间共享程序的内存空间。

协程:是一种基于线程之上,但又比线程更加轻量级的存在,这种由程序员自己写程序来管理的轻量级线程叫做『用户空间线程』,具有对内核来说不可见的特性。

关系

线程与进程

1、线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;
2、一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线;
3、进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段、数据集、堆等)及一些进程级的资源(如打开文件和信号),某进程内的线程在其它进程不可见;
4、调度和切换:线程上下文切换比进程上下文切换要快得多。

线程与协程

按我个人理解其实就是一句话:协程是用户态的,更迷你版本的线程。执行过程中分配给线程去执行 (具体过程就是gmp模型的内容了)

此处引用一张图 对其进行对比。

在这里插入图片描述

探索——任务管理器

任务管理器的性能页面有什么?

在这里插入图片描述

主要是1和2两个地方:
1、进程、线程、句柄(这个词语很奇葩…大概理解为编号,资源的编号)(知乎对他的咒骂csdn一个不错的讲解

2、这里采用Intel的i7 8700K进行举例,这是一款6C12T的处理器。
在这里插入图片描述

插槽即指主板只有一个CPU。
虚拟化指的是CPU虚拟化技术,即Virtual Technology。之前安装docker时候按教程打开的,具体不清楚。
基准速度即核心频率。
内核是物理内核,即内核数(6C)。
逻辑处理器就是超线程技术之后的虚拟核,即线程数(12T)。
L1、L2、L3的三级cache,是一个阶梯缓存的内容,CPU、3级Cache、内存、硬盘这样的结构。

随便搜一个图表达一下,这个是计组的基础知识,不多说。

在这里插入图片描述

win10任务管理器如何查看线程、句柄?

搜到的很多个教程里面都是说这里…或者是通过各种工具去查看。

在这里插入图片描述

实际上,win10中修改了此选项的位置,

在这里插入图片描述

详细信息 页面,右击 名称 ,进入 选择列就可以了。

三种线程

回到开篇所说,我最初产生这个疑惑的原因:“我的处理器只有8线程,但为什么任务管理器有上千个线程。”——我错误之处是混淆了 硬件线程软件线程
一篇intel的官方文档,其中分为了用户级线程+核心级线程+硬件线程。

硬件层面的线程——逻辑处理器

线程可以理解为进程给核心分配任务过程中的一个载体,所有任务都通过线程分配给核心,核心轮转调度进行任务执行。(此处不太知怎么说,期待评论区指点)此处推荐此文中的“【线程是CPU调度和分配的基本单位】的理解“部分
在超线程技术之前,线程和内核数量是一一对应的(抛开IBM-power8这种),超线程技术使用后,线程==2*核心。
超线程技术,即通过共享资源和调度优化,使得一个内核可以分配更多个线程。
例如我一个指令只需要浮点运算,另一个只需要整数运算。换之前 会分配至两个内核,分别各用一半。但使用超线程技术后,就可以使用一个内核,指令1用浮点单元,指令2用整数计算单元。这样提高了效率。

操作系统层面的线程(用户级+内核级)

此处答案很多…引用一个GPT4帮总结的好了。

用户级

1、用户级线程完全在用户空间中管理,不需要内核的直接干预。
2、用户级线程库负责线程的创建、同步和调度等任务。
3、这种线程对操作系统内核是不可见的,因此线程的管理开销较小。
4、用户级线程不能利用多核处理器的优势,因为操作系统内核只看到一个执行单元,所以通常只能在一个核心上调度进程。

内核级

1、内核级线程的管理是由操作系统内核完成的。
2、内核可以管理线程的调度和同步,并且可以在多核处理器上并行运行多个线程。
3、由于线程管理涉及到用户空间和内核空间之间的通信,因此内核级线程的管理开销比用户级线程大。
4、内核级线程可以更好地与操作系统的其他功能(如I/O操作、多处理器调度等)集成。

总结&&调度

1、内核态更高权限,是操作系统进行操作的。用户态是用户自己创建的。
2、调度主要有一对一、多对一、多对多三种模型,具体可以参考此文
3、此调度过程可以大做文章,若用户态线程视为协程,那么GMP模型应该也就相当于这里的一对一模型。修正:GMP是多对多模型。

线程与协程

协程与内核态线程相似,可简单视为是一个东西,但又有许多历史原因带来的差别…具体可见此文探讨

GMP模型中,goroutine所分配给的是内核态线程。

  • 18
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值