Linux_线程概念

news2024/11/26 22:32:27

进程回顾

在学习线程之前,我们先回顾一下之前讲的进程概念

当我们创建一个进程,操作系统会将磁盘中的代码load到内存中,然后创建当前进程的task_struct(后面可能会用”PCB“或者”进程控制块“代替),创建mm_struct维护当前进程的虚拟地址空间,再通过页表映射到物理内存

当我们fork创建一个子进程,为了保证进程的独立性,就要构造新的进程控制块(task_struct),维护新的mm_struct,产生新的页表

虽然父子进程的代码是共享的,但是可以通过 if(pid > 0) / else 这样的分支结构,让父子进程分别执行不同的代码块,有各自的执行流,同时通过写时拷贝也让它们有自己独立的数据区、堆区、栈区。

线程的理解

当新建一个进程,除了创建新的PCB,还要为每个进程独立分配 mm_struct 和页表,这无疑会消耗大量的空间、时间;

现在,我们新建一个”进程“的时候,只为其创建一个新的PCB,但和原来的进程共享同一个mm_struct、同一个页表;

先前我们通过if/else的分支结构拆分代码块,现在我们通过构建函数体的方法,划分代码块,让新的“进程”执行函数体中的那部分代码,同时也为其分配自己的的栈区,从而让它们有各自的执行流

我们就称这种:

  • 在父进程的地址空间内部运行执行流
  • 比进程粒度更低,调度成本更低

的“进程”为线程

这种进程中创建出的一个个线程块我们成为TCB

但是在Linux中并没有为TCB创建独立的结构体,而是复用了task_struct这样的结构体,从CPU的角度看,PCB和TCB是同一个东西

而在Windows这样的真线程操作系统中,专门为线程设计的独立的结构体

重新理解进程

在进程概念一文中我们定义过进程的概念:

进程 = 内核数据结构 + 进程对应的代码数数据

现在,我们从内核的视角重新看待进程:

进程 = 承担分配系统资源的基本实体

如下图,包含了task_structmm_struct、页表、维护的地址映射关系……的整个结构才是进程

它是向系统申请资源的基本单位

而线程成为了调度的基本单位

  • 之前我们提到的内部只有一个执行流的进程是单执行流进程

  • 现在有了线程的概念,我们知道进程内部可以有多个执行流,这样的进程成为多执行流进程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/364819.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

egg+vue实现登录功能【解决vue中登录的潜在问题】

前后端登录功能实现前言一、cookie和session二、代码呈现1.egg部门代码2.vue代码过程前言 记忆在时间面前总是不堪一击! 本人的记录,下面内容仅供参考,如有什么什么,请自行解决。 一、cookie和session 不多赘述,详情…

大数据Hadoop教程-学习笔记03【Hadoop MapReduce与Hadoop YARN】

视频教程:哔哩哔哩网站:黑马大数据Hadoop入门视频教程教程资源: https://pan.baidu.com/s/1WYgyI3KgbzKzFD639lA-_g 提取码: 6666【P001-P017】大数据Hadoop教程-学习笔记01【大数据导论与Linux基础】【17p】【P018-P037】大数据Hadoop教程-学习笔记02【…

风险的定义以及CAPM 和 APT

文章目录风险定义:CAPMAPT(Arbitrage Pricing Theory)套利定价模型风险定义: 投资组合的收益率等于组合中各资产收益率的加权平均,但是投资组合的标准差并不等于组合中各资产标准差的加权平均,而是小于等于…

Git 详细教程

目录1.简介:2.安装Git3.Git 如何工作状态区域4.使用Git5.Git配置5.1 创建仓库 - repository5.2 配置5.2.1 --global5.2.2 检查配置6. 查看工作区的文件状态6.1什么是工作区6.2 如果显示乱码的解决方式7.在工作区添加单个文件8. 添加工作区文件到暂存区9. 创建版本10…

数据结构与算法(二)(Python版)

数据结构与算法(一)(Python版) 文章目录递归动规初识递归:数列求和递归三定律递归的应用:任意进制转换递归的应用:斐波那契数列递归调用的实现分治策略与递归优化问题和贪心策略找零兑换问题贪心…

RocketMQ-基本概念

主题(Topic) Apache RocketMQ 中消息传输和存储的顶层容器,用于标识同一类业务逻辑的消息。主题通过TopicName来做唯一标识和区分。 主题的作用主要如下: 定义数据的分类隔离: 在 Apache RocketMQ 的方案设计中&…

挚文集团短期内不适合投资,长期内看好

来源:猛兽财经 作者:猛兽财经 挚文集团(MOMO)在新闻稿中称自己是“中国在线社交和娱乐领域的领军企业”。 该公司旗下的陌陌是中国“陌生人社交网络”移动应用类别的领导者,并在2022年9月拥有超过1亿的月活跃用户。探…

Eotalk Vol.03:结合 API DaaS,让使用数据更方便

Eotalk 是由 Eolink CEO 刘昊臻发起的泛技术聊天活动,每期都会邀请一些技术圈内的大牛聊聊天,聊些关于技术、创业工作、投融资等热点话题。 Eotalk 的第 3 期,很高兴邀请到 Tapdata CEO TJ 唐建法,TJ 可以说是一位超级大咖&#x…

ESP32-C3 BLE5.0 扩展蓝牙名称长度的流程

蓝牙设备名称长度受限于蓝牙广播数据包的长度,如果广播数据包的长度不能包含完整的设备名称,则只显示短名称,其余不能容纳的部分将被截断。ESP32-C3 支持 BLE5.0,最大广播包长支持 1650 字节,可通过 esp_ble_gap_confi…

Windows下SecureCRT的下载、安装、使用、配置【Telnet/ssh/Serial】

目录 一、概述 二、SecureCRT的下载、安装 三、SecureCRT的使用  👉3.1 使用SSH协议连接Linux开发主机  👉3.2 使用Serial(串口)协议连接嵌入式开发板  👉3.3 使用Telnet协议连接嵌入式开发板 四、SecureCRT配置会话选项  🎨4…

将Nginx 核心知识点扒了个底朝天(九)

Nginx 如何实现后端服务的健康检查? 方式一,利用 nginx 自带模块 ngx_http_proxy_module 和 ngx_http_upstream_module 对后端节点做健康检查。 方式二(推荐),利用 nginx_upstream_check_module 模块对后端节点做健康检查。 Nginx 如何开启…

Homekit智能家居DIY一智能通断开关

智能通断器,也叫开关模块,可以非常方便地接入家中原有开关、插座、灯具、电器的线路中,通过手机App或者语音即可控制电路通断,轻松实现原有家居设备的智能化改造。 随着智能家居概念的普及,越来越多的人想将自己的家改…

SQL零基础入门学习(五)

SQL零基础入门学习(五) SQL零基础入门学习(四) SQL SELECT TOP, LIMIT, ROWNUM 子句 ####SQL SELECT TOP 子句 SELECT TOP 子句用于规定要返回的记录的数目。 SELECT TOP 子句对于拥有数千条记录的大型表来说,是非…

如何使用DevEco Studio创建Native C++应用

简介本篇主要介绍如何使用DevEco Studio for OpenAtom OpenHarmony (以下简称“OpenHarmony”)创建一个Native C应用。应用采用“Native C”模板,实现了通过Node-API调用C标准库的功能。本示例通过调用C标准库接口来演示调用过程,…

【macos游戏】RimWorld人工智能说书人控制的科幻殖民地模拟器

原文来源于黑果魏叔官网,转载需注明出处。由人工智能说书人控制的科幻殖民地模拟器。RimWorld控制了一艘太空客轮坠毁的三名幸存者,该飞船在所探索的空间边缘建造了一个殖民地。这款游戏的灵感来源是萤火虫太空西部的精神、对矮人堡垒的深入研究以及史诗…

Python数值方法及数据可视化

随机数和蒙特卡洛模拟求解单一变量非线性方程求解线性系统方程函数的数学积分常微分方程的数值解 等势线绘图和曲线: 等势线 import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3Dx_vals np.linspace(-5,5,20) y_vals …

我们接下来来讲解一下spring的spi机制

大家这俩可能会想到说spring的spi的应用场景,别着急我们慢慢来说,首先来说一个我们熟知的SpringBoot的自动装配是如何实现的?基本上,你一说是基于spring的SPI扩展机制,再把spring.factories文件和EnableAutoConfigurat…

Mysql——主从复制与读写分离

1.什么是主从复制 主从复制:是一种数据备份的方案。 一般来说,是使用两个或两个以上相同的数据库,将一个数据库当做主数据库,另一个数据库当做从数据库。在主数据库中进行相应操作时,从数据库记录下所有主数据库的操…

Hive学习——分桶抽样、侧视图与炸裂函数搭配、hive实现WordCount

目录 一、分桶抽样 1.抽取表中10%的数据 2.抽取表中30%的数据 3.取第一行 4.取第10行 5.数据块抽样 6.tablesample详解 二、UDTF——表生成函数 1.explode()——炸裂函数 2.posexpolde()——只能对array进行炸裂 3.inline()——炸裂结构体数组 三、UDTF与侧视图的搭…

【持续学习】清华最新持续学习综述

为了应对现实世界的动态变化,智能体需要在其生命周期中增量地获取、更新、积累和利用知识。这种能力被称为持续学习,为人工智能系统自适应发展提供了基础。本文来自于https://arxiv.org/abs/2302.00487在一般意义上,持续学习明显受到灾难性遗…