当前位置: 首页 > news >正文

聊透多线程编程-线程基础-1.进程、线程基础概念

目录

一、进程

二、线程

三、进程与线程的关系

四、进程与线程的比较


注:本文多张图片来源于网络,如有侵权,请联系删除

一、进程

1. 进程的定义

进程是指在系统中正在运行的一个应用程序的实例,是操作系统进行资源分配和调度的基本单位。它包含了程序执行的上下文环境,包括程序计数器、寄存器、堆栈、内存空间等。例如,当你打开一个浏览器,浏览器程序就会作为一个进程在操作系统中运行,操作系统会为该进程分配内存、CPU 时间等资源。

2. 进程的状态

     

  • 就绪状态:进程已获得除 CPU 以外的所有必要资源,只要获得 CPU 时间,就可以立即执行。例如,多个应用程序同时启动后,它们的进程会处于就绪状态,等待 CPU 分配时间片来运行。
  • 运行状态:进程正在 CPU 上执行。在单 CPU 系统中,任何时刻最多只有一个进程处于运行状态;在多 CPU 系统中,可能有多个进程同时处于运行状态。
  • 阻塞状态:进程因等待某一事件而暂时无法继续执行,如等待输入输出完成、等待信号量等。例如,当进程需要从磁盘读取数据时,它会进入阻塞状态,直到数据读取完成。

3. 进程的组成

  • 程序段:是进程中可执行的代码部分,包含了实现进程功能的指令序列。例如,一个 C 语言编写的程序,其编译后的可执行文件中的代码部分就是程序段。
  • 数据段:用于存储进程运行时所需要的数据,包括全局变量、静态变量等。例如,在一个计算平均数的程序中,用于存储输入数据的数组就位于数据段。
  • 进程控制块(PCB):是操作系统用于管理进程的专门数据结构,包含了进程的各种信息,如进程标识符、进程状态、优先级、程序计数器、寄存器值等。操作系统通过 PCB 来对进程进行控制和管理。

4. 进程的调度

   

  • 调度的概念:由于系统中存在多个进程,而 CPU 资源有限,需要通过进程调度来决定哪个进程能够获得 CPU 时间片进行执行。
  • 调度算法:常见的调度算法有多种。
    • 先来先服务(FCFS):按照进程到达的先后顺序进行调度,先到达的进程先获得 CPU 资源。例如,多个作业依次提交到系统中,系统会按照它们提交的顺序依次执行。
    • 短进程优先(SPF):优先调度运行时间短的进程。这种算法可以提高系统的吞吐量,但可能会导致长进程长时间等待。
    • 优先级调度:为每个进程分配一个优先级,优先级高的进程优先获得 CPU 资源。例如,系统中的关键进程(如系统更新进程)可以设置较高的优先级,以确保它们能够及时得到执行。
    • 时间片轮转调度:将 CPU 时间划分为固定大小的时间片,每个进程轮流在一个时间片内执行。当时间片用完后,无论进程是否执行完毕,都会被暂停,然后调度下一个进程执行。这种算法可以保证每个进程都能得到一定的 CPU 时间,实现了进程之间的公平调度。

5. 进程间通信

  • 管道:是一种半双工的通信方式,数据只能单向流动,通常用于具有亲缘关系的进程之间(如父子进程)。例如,在 Linux 系统中,可以使用管道将一个命令的输出作为另一个命令的输入。

    

  • 消息队列:进程可以向消息队列中发送消息,也可以从消息队列中读取消息。消息队列可以实现不同进程之间的异步通信。例如,一个进程负责产生数据并将其放入消息队列,另一个进程从消息队列中取出数据进行处理。
  • 共享内存:多个进程可以共享同一块内存区域,通过对共享内存的读写来实现数据交换和通信。这是一种高效的通信方式,但需要注意进程之间对共享内存的同步访问,以避免数据冲突。
  • 信号量:主要用于进程之间的同步和互斥控制。它是一个计数器,用于表示系统中某种资源的可用数量。例如,当多个进程需要访问同一台打印机时,可以使用信号量来确保在同一时刻只有一个进程能够使用打印机。

 

二、线程

1. 线程的定义

线程是进程中的一个实体,是被系统独立调度和分派的基本单位。它可以与同属一个进程的其他线程共享进程所拥有的全部资源,包括内存空间、文件描述符等,但是每个线程有自己独立的程序计数器、寄存器和栈空间,能够独立执行程序代码。例如,在一个浏览器进程中,可能会有多个线程,如负责页面渲染的线程、处理网络请求的线程、执行 JavaScript 代码的线程等,它们协同工作,共同完成浏览器的各种功能。

2.线程的特点

  • 轻量级:创建和销毁线程的开销比进程小得多。因为线程是在进程内部创建的,不需要像创建进程那样分配大量的系统资源,如内存空间、文件系统资源等。
  • 并发执行:同一进程中的多个线程可以并发执行,从而提高程序的执行效率和响应速度。多个线程可以同时处理不同的任务,例如在一个多线程的文件下载程序中,一个线程可以负责从网络中读取数据,另一个线程可以将读取到的数据写入文件,还有一个线程可以实时更新下载进度条,这样可以让用户感觉到下载过程更加流畅,同时也提高了下载的效率。
  • 共享资源:线程可以访问和共享所属进程的资源,这使得线程之间的通信和数据共享变得非常方便。例如,多个线程可以访问同一个全局变量,从而实现数据的共享和交换。但是,这种共享也需要注意线程安全问题,以避免多个线程同时访问和修改同一资源时导致数据不一致。

3.线程的状态

  • 新建状态:当线程被创建时,它处于新建状态。此时,线程对象已经被分配了内存空间,但是还没有开始执行线程的代码。例如,通过new Thread()创建一个线程对象后,该线程就处于新建状态。
  • 就绪状态:线程创建后,调用start()方法,线程就进入就绪状态。在就绪状态下,线程已经具备了执行的条件,等待 CPU 调度器将其调度到 CPU 上执行。
  • 运行状态:当 CPU 调度器选择了一个就绪状态的线程并将其分配到 CPU 上执行时,线程就进入运行状态。在运行状态下,线程执行其包含的代码逻辑。
  • 阻塞状态:线程在执行过程中,可能会因为某些原因而暂停执行,进入阻塞状态。例如,线程在等待某个事件的发生(如等待用户输入、等待网络数据到达)、调用了sleep()方法或者获取不到所需的资源(如锁)等情况。当阻塞的原因解除后,线程会重新回到就绪状态,等待 CPU 调度再次进入运行状态。
  • 终止状态:当线程执行完其代码逻辑或者因为异常等原因提前结束时,线程进入终止状态。处于终止状态的线程不再具备执行的能力,其占用的系统资源会被释放。

4.线程的实现方式

  • 用户级线程:用户级线程是由用户程序自己实现的线程,不需要操作系统的支持。这种线程的创建、调度和管理都由用户程序自己完成,操作系统并不知道用户级线程的存在。用户级线程的优点是实现简单,不需要操作系统的特殊支持,而且线程的切换速度快,因为不需要陷入操作系统内核。但是,用户级线程不能充分利用多核处理器的并行性,因为操作系统只能看到进程,而无法对用户级线程进行调度。
  • 内核级线程:内核级线程是由操作系统内核支持的线程。操作系统内核负责线程的创建、调度和管理,为每个线程分配独立的内核数据结构和栈空间。内核级线程可以充分利用多核处理器的并行性,因为操作系统可以对每个线程进行独立的调度。但是,内核级线程的创建和切换开销较大,因为需要陷入操作系统内核,进行上下文切换等操作。
  • 混合式线程:混合式线程结合了用户级线程和内核级线程的优点。它将多个用户级线程映射到较少的内核级线程上,通过用户级线程库来管理用户级线程,而由操作系统内核来管理内核级线程。这样既可以提高线程的创建和切换速度,又可以充分利用多核处理器的并行性。

5.线程安全与同步

  • 线程安全问题:当多个线程同时访问和修改共享资源时,可能会导致数据不一致或者程序出现错误的结果,这就是线程安全问题。例如,两个线程同时对一个全局变量进行加 1 操作,如果没有适当的同步机制,可能会导致最终的结果与预期不符。
  • 同步机制:为了解决线程安全问题,需要使用同步机制来确保在同一时刻只有一个线程能够访问共享资源。常见的同步机制包括锁、信号量、互斥量、条件变量等。例如,使用 Java 语言中的synchronized关键字可以对方法或者代码块进行加锁,确保在同一时刻只有一个线程能够执行被synchronized修饰的代码。

 

三、进程与线程的关系

线程是进程中的一个执行单元,一个进程可以包含多个线程。进程是资源分配的基本单位,而线程是 CPU 调度的基本单位。线程共享所属进程的资源,如内存空间、文件描述符等,但每个线程都有自己独立的栈空间、程序计数器和寄存器等。
 

四、进程与线程的比较

资源分配

进程是资源分配的基本单位,操作系统会为每个进程分配独立的内存空间,包括代码段、数据段、堆和栈等区域,同时还会分配文件描述符、打开的文件、信号处理等资源。每个进程拥有自己独立的地址空间,进程之间的资源相互隔离,互不干扰。
线程本身并不拥有系统资源(除了一些必不可少的资源,如程序计数器、寄存器和栈等),而是共享所属进程的资源,这使得线程之间的资源共享更加容易。但由于多个线程共享同一进程的资源,在对共享资源进行访问时,就需要注意资源访问的同步问题,以避免数据不一致或竞态条件的发生。
 

调度

进程的调度由操作系统的进程调度器负责,调度的单位是进程。在进行进程切换时,需要保存和恢复进程的上下文信息,包括进程的地址空间、寄存器状态等,这个过程开销较大。
线程是 CPU 调度的基本单位,操作系统可以更精细地对线程进行调度。线程的上下文切换相对简单,因为线程共享进程的地址空间,只需要保存和恢复线程的局部状态(如程序计数器、寄存器值和栈指针等),所以线程切换的开销较小,能够提高系统的并发性能,使得系统可以在更短的时间内处理更多的任务。


并发能力

进程之间的并发是通过操作系统的进程调度来实现的,每个进程在其独立的地址空间中运行,进程之间的并发粒度较大。不同进程之间的通信和协作需要通过专门的进程间通信(IPC)机制,如管道、消息队列、共享内存等,这些机制相对复杂且开销较大。线程之间的并发除了依赖操作系统的调度外,还可以在同一进程内通过线程的切换来实现更细粒度的并发。同一进程内的多个线程可以并发执行,它们之间可以直接共享数据,通信和协作相对简单高效。因此,在处理并发任务时,多线程编程通常比多进程编程更具有优势,可以更充分地利用 CPU 资源,提高程序的执行效率和响应速度。


健壮性

进程具有较高的独立性和健壮性,一个进程的崩溃通常不会影响到其他进程,因为每个进程有自己独立的地址空间和资源。如果一个进程出现异常,操作系统可以将其终止而不影响其他进程的正常运行。
线程的健壮性相对较低,由于线程共享进程的资源,一个线程的错误(如访问非法内存、死循环等)可能会导致整个进程崩溃,因为它们都处于同一进程的地址空间内,一个线程的错误操作可能会破坏进程的资源,影响其他线程的正常运行。


创建和销毁开销

创建进程时,操作系统需要为其分配大量的系统资源,如内存空间、文件描述符等,还需要进行进程控制块(PCB)等数据结构的初始化,因此创建进程的开销较大。销毁进程时,也需要释放其占用的所有资源,包括回收内存、关闭文件等操作,开销也比较大。
创建线程的开销相对较小,因为线程不需要分配独立的地址空间,只需要在进程的地址空间内分配少量的栈空间和寄存器等资源,并进行一些简单的初始化操作。销毁线程时,也只需要释放线程自身占用的少量资源,开销较小,这使得在需要频繁创建和销毁执行单元的场景下,使用线程比使用进程更加合适。


 编程复杂度

进程编程相对简单,因为进程之间相互独立,不需要考虑资源共享和同步的问题,进程间的通信和协作通过专门的 IPC 机制进行,这些机制相对明确和规范。
线程编程的复杂度较高,由于线程共享进程的资源,需要仔细考虑资源共享和同步的问题,以避免出现数据竞争、死锁等问题。同时,多线程编程还需要处理线程的生命周期管理、线程间的协调等问题,这对程序员的编程能力和经验要求较高。

 

相关文章:

聊透多线程编程-线程基础-1.进程、线程基础概念

目录 一、进程 二、线程 三、进程与线程的关系 四、进程与线程的比较 注:本文多张图片来源于网络,如有侵权,请联系删除 一、进程 1. 进程的定义 进程是指在系统中正在运行的一个应用程序的实例,是操作系统进行资源分配和调…...

Android:Android Studio右侧Gradle没有assembleRelease等选项

旧版as是“Do not build Gradle task list during Gradle sync” 操作这个选项。 参考这篇文章:Android Studio Gradle中没有Task任务,没有Assemble任务,不能方便导出aar包_gradle 没有task-CSDN博客 在as2024版本中,打开Setting…...

LeetcodeBST2JAVA

235.二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大&…...

如何创建单独的城市活码?活码能永久使用吗?

如何创建单独的城市活码 创建单独的城市活码通常需要借助专业的第三方工具,以下是具体步骤: 1.选择合适的工具 推荐使用专业的活码生成工具。 2.注册并登录 访问官网,完成注册并登录。 3.创建活码 在首页点击“创建活码”按钮。输入活码…...

用户画像(https://github.com/memodb-io/memobase)应用

1.下载项目的源代码,我们要先启动后端,用docker启动 cd src/server cp .env.example .env cp ./api/config.yaml.example ./api/config.yaml 这里我的配置内容如下config.yaml(因为我是调用的符合openai格式的大模型,所以我没改,如果要是别的大模型的话,需要自己再做兼容…...

基于形状补全和形态测量描述符的腓骨游离皮瓣下颌骨重建自动规划|文献速递-深度学习医疗AI最新文献

Title 题目 Automated planning of mandible reconstruction with fibula free flap basedon shape completion and morphometric descriptors 基于形状补全和形态测量描述符的腓骨游离皮瓣下颌骨重建自动规划 01 文献速递介绍 因创伤、骨髓炎和肿瘤而接受下颌骨节段切除术…...

Python3笔记之号称替代pip的uv包管理器

uv是什么? uv,这是一个由 Astral 团队开发的极快速的Python包和项目管理工具,用Rust语言编写。它集成了多种功能,旨在替代pip、pip-tools、pipx、poetry、pyenv、twine、virtualenv等多个工具,提供更高效、更全面的Py…...

面试如何应用大模型

在面试中,如果被问及如何应用大模型,尤其是面向政务、国有企业或大型传统企业的数字化转型场景,你可以从以下几个角度进行思考和回答: 1. 确定应用大模型的目标与痛点 首先,明确应用大模型的业务目标,并结合企业的实际需求分析可能面临的痛点。这些企业通常会关注如何提…...

贪心算法:部分背包问题深度解析

简介: 该Java代码基于贪心算法实现了分数背包问题的求解,核心通过单位价值降序排序和分阶段装入策略实现最优解。首先对Product数组执行双重循环冒泡排序,按wm(价值/重量比)从高到低重新排列物品;随后分两阶段装入:循环…...

Java程序的基本规则

java程序的基本规则 1.1 java程序的组成形式 Java程序是一种纯粹的面向对象的程序设计语言,因此Java程序 必须以类(class)的形式存在,类(class)是Java程序的最小程序 单位。Java程序不允许可执行性语句…...

机器学习-线性回归模型

机器学习-线性回归模型 线性模型笔记1、向量化2、线性回归模型公式3、损失函数(代价函数)4、梯度下降法5、Python 实现示例 6、使用 sklearn 实现线性回归模型✅ 基本步骤如下:📦 示例代码: 7、numpy中的切片X[n,:]是取…...

Linux 入门指令(1)

(1)ls指令 ls -l可以缩写成 ll 同时一个ls可以加多个后缀 比如 ll -at (2)pwd指令 (3)cd指令 cd .是当前目录 (4)touch指令 (5)mkdir指令 (6)rmdir和rm…...

密码学基础——AES算法

目录 一、算法背景 AES算法与Rijndael算法 二、算法特点 1.安全性高 2.效率高 3.灵活性好 三、算法说明 3.1状态、种子密钥和轮数的概念 (1)状态(State) 定义 结构:通常状态是一个 4N 字节的矩阵&#xff0…...

淘宝API与小程序深度联动:商品详情页“一键转卖”功能开发

要实现淘宝 API 与小程序深度联动,开发商品详情页 “一键转卖” 功能,可按以下步骤进行: 1. 前期准备 淘宝开放平台接入:在淘宝开放平台注册开发者账号,创建应用,获取 App Key 和 App Secret,…...

深入解析 C++ 设计模式:原理、实现与应用

一、引言 在 C 编程的广袤领域中,设计模式犹如闪耀的灯塔,为开发者指引着构建高效、可维护软件系统的方向。设计模式并非神秘莫测的代码魔法,实际上,我们在日常编程中或许早已与之打过交道。简单来说,设计模式常常借助…...

配置与管理代理服务器

安装squid Squid软件包在标准yum存储库中可用,因此,我们正在使用yum命令安装Squid代理。 [rootserver ~]# dnf install -y squid //安装 [rootserver ~]#systemctl enable --now squid.service [rootserver ~]#systemctl status squid.serv…...

RuntimeError: CUDA error: invalid device function

CUDA内核编译时的架构设置与当前GPU不兼容导致 -- The CUDA compiler identification is NVIDIA 11.5.119 (实际为 12.6) 解决方案: 1. 查看显卡计算能力 2. CMakeLists.txt 修改 set_target_properties(my_library PROPERTIESCUDA_AR…...

vulnhub:sunset decoy

靶机下载地址https://www.vulnhub.com/entry/sunset-decoy,505/ 渗透过程 简单信息收集 nmap 192.168.56.0/24 -Pn # 确定靶机ip:192.168.56.121 nmap 192.168.56.121 -A -T4 # 得到开放端口22,80 在80端口得到save.zip,需要密码解压。 john破解压缩…...

MySQL日期时间类型详解:DATE、TIME和DATETIME的用法与区别

在数据库设计中,正确处理日期和时间数据是至关重要的。MySQL提供了多种数据类型来存储时间信息,其中最常用的三种是DATE、TIME和DATETIME。本文将详细介绍这三种类型的特性、区别以及实际应用场景。 一、基本数据类型介绍 1. DATE类型 用途&#xff1…...

js异步机制

1、什么是异步机制?为什么js需要异步机制? 异步机制和同步机制是相对应的,异步是指:当代码按照顺序执行到一些比较耗时的操作,不会立刻执行,而是将这些操作推到一个队列中等待合适的时机从队列中取出任务执…...

Pycharm常用快捷键总结

主要是为了记录windows下的PyCharm的快捷键,里面的操作都试过了功能描述会增加备注。 文件操作 快捷键功能描述Ctrl N新建文件Ctrl Shift N根据名称查找文件Ctrl O打开文件Ctrl S保存当前文件Ctrl Shift S另存为Alt F12打开终端(Terminal&…...

巧记英语四级单词 Unit2-下【晓艳老师版】

mit传递(send 送)、 superiority n.优势,优越性 超越别人的东西就是自己的优势govern v.统治 government政府 统治的机构administer v.管理,治理 minister 大臣 部长,mini-小人,一再的做大臣 部长&#xf…...

走进底层 - JVM工作原理入门指南

走进底层 - JVM工作原理入门指南 Java 之所以能够实现“一次编写,到处运行”(Write Once, Run Anywhere, WORA),核心在于 Java 虚拟机(JVM, Java Virtual Machine)。JVM 是 Java 程序的运行环境&#xff0c…...

windows 10频繁通知A字“出现了问题,无法安装功能。”

一、故障突现 windows 10频繁通知A字“出现了问题,无法安装功能。” 编辑文档时发现黑体、楷体gb_2312等常用字体,在字体列表中失踪,原来设置好的字体也显示失效。 二、起因分析 回想了一下,是3月27日安装了 2025-适用于Windows…...

基础环境配置

1.GitGerritjenkins Linux 远程登录 | 菜鸟教程 https://zhuanlan.zhihu.com/p/22766058062 2.Samba 配置 3.软件安装 (1)MobaXterm (2)Vscode (3)Xmind (4) Audacity Aud…...

ROS2——foxy apt打包离线安装deb包

需要从A设备复制ROS2环境到B设备,且B设备有可能没网络,所以选择制作离线资源包 1. 本机安装指令 本机环境ubuntu20.04,安装ros2-foxy版本,直接输入以下指令,基本不会遇到问题 这里安装的是ros-base版本,不…...

大数据学习(104)-clickhouse与hdfs

🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一…...

大数据 - 1. 概述

早期的计算机(上世纪70年代前) 是相互独立的,各自处理各自的数据上世纪70年代后,出现了基于TCP/IP协议的小规模的计算机互联互通。上世纪90年代后,全球互联的互联网出现。当全球互联网逐步建成(2000年左右&…...

CD25.【C++ Dev】类和对象(16) static成员(上)

目录 1.static成员变量 问题:实现一个类,计算程序中创建出了多少个类对象 设计思路 代码示例 版本1 版本2 static成员 特点1.static成员为静态成员,为所有类对象所共享(在某种程度上可以理解为全局的,用类去封装"全局变量"),存放在静态区,则不属于某个具体的…...

C语言今天开始了学习

好多年没有弄了,还是捡起来弄下吧 用的vscode 建议大家参考这个配置 c语言vscode配置 c语言这个语言简单,但是今天听到了一个消息说python 不知道怎么debug。人才真多啊...

Mockito如何对静态方法进行测试

在 Mockito 中,直接对静态方法进行模拟是困难的,因为 Mockito 的设计理念是优先通过依赖注入(DI)管理对象,而静态方法破坏了这种设计(难以解耦)。不过,从 Mockito 3.4.0 版本开始,通过 mockStatic 方法支持了对静态方法的模拟(需配合 mockito-inline 依赖)。 从 Mo…...

Three.js 入门实战:安装、基础概念与第一个场景⭐

学习本章节你不必要追求细节,你只需要了解基本的3D场景需要哪些元素组成,如何通过组成3D场景的元素属性调整来控制3D物体或者场景即可。 在上一篇文章中我们初识了 Three.js,今天我们正式进入实战环节 🎯 前置准备: …...

【QT】QT的消息盒子和对话框(自定义对话框)

QT的消息盒子和对话框(自定义对话框) 一、消息盒子QMessageBox1、弹出警告盒子示例代码:现象: 2、致命错误盒子示例代码:现象: 3、帮助盒子示例代码:现象: 4、示例代码: …...

QT面试题:内存管理与对象生命周期

题目​: 在Qt中,当一个父对象被销毁时,其子对象是否会被自动释放?请结合Qt的内存管理机制说明原因,并解释在什么情况下可能导致内存泄漏。如何避免这类问题? ​参考答案​ ​父子对象的内存管理机制​ ​…...

linux查询inode使用率

在 Linux 中,inode 用于存储文件和目录的元数据(如权限、所有者、时间戳等)。当文件系统的 inode 被耗尽时,即使磁盘空间充足,系统也会提示 No space left on device。以下是查询 inode 使用率的详细方法: …...

算法基础—二分算法

目录 一、⼆分查找例题 1 牛可乐和魔法封印 2 A-B 数对 3 烦恼的高考志愿 二、 ⼆分答案 1 木材加⼯ 2 砍树 3 跳石头 ⼆分算法的原理以及模板其实是很简单的,主要的难点在于问题中的各种各样的细节问题。因此,⼤多数情况下,只是背会…...

2024年第十五届蓝桥杯CC++大学A组--成绩统计

2024年第十五届蓝桥杯C&C大学A组--成绩统计 题目: 动态规划, 对于该题,考虑动态规划解法,先取前k个人的成绩计算其方差,并将成绩记录在数组中,记录当前均值,设小蓝已检查前i-1个人的成绩&…...

家居实用品:生活中的艺术,家的温馨源泉‌

在快节奏的现代生活中,家居实用品不仅是日常所需的工具,更是营造温馨家居氛围、提升生活品质的关键元素。它们以其独特的魅力,默默地融入我们的日常生活,成为连接物质世界与精神世界的桥梁。 走进家门,首先映入眼帘的或…...

TCP重传率高与传输延迟问题

目录标题 排查步骤:TCP重传率高与传输延迟问题v1.0通过 rate(node_netstat_Tcp_RetransSegs[3m]) 排查 TCP 重传问题的步骤1. **指标含义与初步分析**2. **关联指标排查**3. **定位具体问题源**4. **解决方案**5. **验证与监控** v2.0一、基础检查二、网络层分析三、…...

超越简单检索:探索知识图谱与大型语言模型的协同进化之路

摘要: 大型语言模型(LLM)在自然语言处理领域取得了革命性进展,但其在事实准确性、复杂推理和可解释性方面仍面临挑战,“幻觉”现象是其固有局限性的体现。知识图谱(KG)作为结构化人类知识的载体&#xff0c…...

汽车的四大工艺

文章目录 冲压工艺核心流程关键技术 焊接工艺核心流程 涂装工艺核心流程 总装工艺核心流程终检与测试静态检查动态检查四轮定位制动转鼓测试淋雨测试总结 简单总结下汽车的四大工艺(从网上找了一张图,感觉挺全面的)。 冲压工艺 将金属板材通过…...

研发效能实践:技术评审会生存指南

文章目录 🚨‌开篇暴击:为什么你的评审会像「菜鸡互啄」?‌⚙️‌第一章:Google Design Sprint——5天把争议变成共识‌📅 ‌Day 1-5 实操手册‌‌Map the Problem(画地图)‌‌Sketch Solutions…...

js 拷贝

在 JavaScript 中,拷贝对象和数组时需要特别注意,因为对象和数组是引用类型,直接赋值只会复制引用,而不是实际的数据。以下是几种常见的拷贝方法及其应用场景: 1. 浅拷贝(Shallow Copy) 浅拷贝…...

AI比人脑更强,因为被植入思维模型【51】效率思维模型

giszz的理解:效率实际没有用,过分的追求效率,也是当下社会的弊病。但是效率思维,让我们能够用一个最简单的模型,去平衡投入和产出的最佳比例。过高的效率,会导致过大的压力,合适是最好的。 一、…...

Spark RDD相关概念

Spark运行架构与核心组件 1.Spark运行梁构 spark运行架构包括master和slave两个主要部分。master负责管理整个集群的作业任务调度,而slave则负责实际执行任务。 dirver是Spark驱动器节点,负责执行Spark任务中的main方法,将用户程序转换成作业…...

每日一题(小白)数组娱乐篇21

由于题意可知我们是要将对应的数字转换为英文,我们要考虑两点一个是进制的转换,也就是类似于我们的十进制一到9就多一位,这里的进制就是Z进制也就是27进制一旦到26下一位则进位;另一方面要考虑数字的转换也就是1~26对应A~Z。解决上…...

LLM 的model.generate() 参数说明

LLM 的model.generate() 参数说明 目录 LLM 的model.generate() 参数说明生成长度控制参数采样策略参数重复惩罚参数束搜索参数其他参数model.generate() 方法是 Hugging Face Transformers 库中用于文本生成的核心方法,它有众多参数可用于控制生成过程 生成长度控制参数 min…...

每日一题——AB10 反转链表

ListNode* prev NULL;while(head) {ListNode* next head->next; // 先记住下一个节点head->next prev; // 把当前节点指向前一个prev head; // 前一个节点变成当前节点head next; // 当前节点移动到下一个}return prev; // …...

大模型备案语料安全要求解析

根据大模型备案法规要求及实践经验,我整理除了以下涉及到语料安全相关环节的要求,供大家参考,如果有大模型备案和算法备案的更多疑问,也可以和我沟通交流。 一、关键词库规模与覆盖范围 1.基础规模 企业需建立拦截关键词库&…...

【Ansible自动化运维】二、Playbook 深入探究:构建复杂自动化流程

​ 在 Ansible 自动化运维体系中,Playbook 是极为关键的部分。它允许我们以一种结构化、可重复的方式定义和执行一系列复杂的任务,从而构建高效的自动化流程。本篇文章将深入探究 Ansible Playbook 的各个方面,助您掌握构建复杂自动化…...