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

Linux 线程概念

目录

一、什么是线程

1. 线程的本质

2. 线程的独有资源

3. 进程与线程关系示意图

二、线程的优缺点 

2.1 线程的优点

2.2 线程的缺点

三、线程的异常与用途

1. 线程异常

2. 线程用途

四、进程 VS 线程

1. 核心差异

2. 进程的多个线程共享的资源

3. 进程和线程的关系

五、二级页表

1. 为什么需要二级页表?

2. 二级页表如何工作?

3. 页表项的奥秘:不只是地址映射

4. 段错误背后的硬件机制

5. MMU:幕后功臣

总结:二级页表的精妙设计


一、什么是线程

1. 线程的本质

        想象一个大型商场(进程)里有多个导购员(线程)。每个导购员可以独立服务顾客,但共享商场的公共资源(试衣间、收银台等)。线程也是如此:

  • 执行路线:线程是程序内部的一条独立执行路径。

  • 轻量级进程:在Linux中,线程被称为"轻量级进程"(LWP),因为它的PCB(进程控制块)比传统进程更精简。

  • 资源共享:所有线程共享进程的内存空间(代码段、数据段、打开的文件等)。

  • 简单来说,在一个程序里,一个执行路线就叫做线程。更准确地讲,线程是 “一个进程内部的控制序列”。
  • 一切进程至少都有一个执行线程,线程在进程内部运行,本质是在进程地址空间内运行。
  • 在 Linux 系统中,从 CPU 的角度看,它看到的 PCB(进程控制块)比传统的进程更加轻量化。
  • 透过进程虚拟地址空间,我们可以看到进程的大部分资源,而将这些资源合理分配给每个执行流,就形成了线程执行流。

2. 线程的独有资源

虽然共享大部分资源,但每个线程也有自己的"私人空间":

  • 线程ID:唯一身份标识

  • 寄存器集合:保存当前执行上下文

  • 独立栈空间:用于函数调用和局部变量

  • 错误状态:errno变量记录最近错误

  • 信号屏蔽:自定义哪些信号被阻塞

  • 调度优先级:影响CPU时间分配

3. 进程与线程关系示意图

  1. 进程是资源分配的单位:独立王国,拥有领土(内存)、法律(页表)和军队(资源)。

  2. 线程是执行的单位:王国中的骑士团,共享国土但各自征战。

  3. 轻量级进程(LWP):Linux的独特设计,用“小王国”模拟“骑士团”。


🌴线程的真相:共享资源的“轻量级员工”

如果创建新“进程”时只复制task_struct,并共享父进程的地址空间和页表,结果会怎样?
——这就是线程的诞生!

  • 四个线程共享同一地址空间,就像同一部门的四个团队,共用办公室、打印机和文件柜。

  • 每个线程有自己的task_struct(员工档案)、独立栈空间(个人工作台)和寄存器(当前任务进度)。

关键区别

特性进程线程(轻量级进程)
资源分配独立地址空间和页表共享父进程地址空间和页表
创建成本高(复制所有资源)低(仅复制task_struct)
独立性完全独立共享大部分资源

🌴CPU眼中的世界:只认“执行流”

对CPU来说,调度单位是task_struct,无论它是进程还是线程:

  • 单执行流进程:部门里只有一个员工(传统进程)。

  • 多执行流进程:一个部门有多个团队协作(多线程进程)。

CPU不关心是进程还是线程,就像老板只关心任务是否完成,不关心是哪个团队做的。Linux将所有执行流视为轻量级进程,通过复用进程管理机制简化设计。 


🌴为何Linux没有“真线程”?设计哲学的智慧

  1. 简化内核设计
    Linux选择用进程模拟线程,避免为线程单独设计管理模块。想象一家公司如果同时管理部门和团队,需要两套制度,而Linux选择只管理“部门”,通过调整权限实现“团队”协作。

  2. 用户层封装
    虽然内核没有线程系统调用,但用户可以通过pthread库创建线程。这就像公司提供“团队协作工具包”(pthread),让部门经理(程序员)轻松管理多个团队(线程),而无需修改公司制度(内核)。

二、线程的优缺点 

2.1 线程的优点

1. 创建成本低

        创建一个新线程的代价要比创建一个新进程小得多。就好比在工厂里,增加一个新的工作小组,比新建一个工厂要简单得多,不需要重新购置大量的设备和资源。

2. 切换速度快

        与进程之间的切换相比,线程之间的切换需要操作系统做的工作要少很多。这是因为线程共享进程的很多资源,切换时不需要重新加载这些资源,就像同一个工厂里的不同小组切换任务时,不需要重新布置整个工厂的环境。

3. 资源占用少

        线程占用的资源要比进程少很多,这样在系统资源有限的情况下,可以更高效地利用资源,运行更多的任务。

4. 充分利用多处理器

        在多处理器系统中,线程能充分利用多处理器的可并行数量,让多个线程在不同的处理器上同时运行,大大提高计算效率。

5. 提高 I/O 操作效率

        在等待慢速 I/O 操作结束的同时,程序可执行其他的计算任务。比如,在下载文件的同时,还可以进行其他操作,不会因为等待下载而让整个程序卡住。

6. 优化计算密集型应用

        对于计算密集型应用,为了能在多处理器系统上运行,可以将计算分解到多个线程中实现,从而加快计算速度。

7. 提升 I/O 密集型应用性能

        对于 I/O 密集型应用,为了提高性能,可以将 I/O 操作重叠。线程可以同时等待不同的 I/O 操作,让程序运行更加流畅。

2.2 线程的缺点

1. 性能损失风险

        一个很少被外部事件阻塞的计算密集型线程往往无法与其它线程共享同一个处理器。如果计算密集型线程的数量比可用的处理器多,那么可能会有较大的性能损失。这里的性能损失指的是增加了额外的同步和调度开销,而可用的资源不变。

2. 健壮性降低

        编写多线程程序需要更全面更深入的考虑。在一个多线程程序里,因时间分配上的细微偏差或者因共享了不该共享的变量而造成不良影响的可能性是很大的。换句话说,线程之间是缺乏保护的,一个线程的错误操作可能会影响到其他线程。

3. 缺乏访问控制

        进程是访问控制的基本粒度,在一个线程中调用某些 OS 函数会对整个进程造成影响。这就意味着,在多线程程序中,需要更加小心地控制对系统资源的访问,避免出现意外的情况。

4. 编程难度提高

        编写与调试一个多线程程序比单线程程序困难得多。多线程程序的逻辑更加复杂,需要考虑线程之间的同步、通信等问题,这对程序员的技术水平和经验要求更高。

三、线程的异常与用途

1. 线程异常

        单个线程如果出现除零、野指针问题导致线程崩溃,进程也会随着崩溃。因为线程是进程的执行分支,线程出异常,就类似进程出异常,进而触发信号机制,终止进程。进程终止,该进程内的所有线程也就随即退出。所以在多线程程序中,需要特别注意异常处理,避免因为一个线程的问题导致整个程序崩溃。

2. 线程用途

        合理的使用多线程,能提高 CPU 密集型程序的执行效率。比如在进行大规模数据计算、图像渲染等任务时,多线程可以让计算任务在多个处理器上并行执行,大大缩短计算时间。

        同时,合理的使用多线程,能提高 I/O 密集型程序的用户体验。比如在生活中,我们一边写代码一边下载开发工具,这就是多线程运行的一种表现。在下载文件的同时,还可以继续进行其他操作,不会因为等待下载而让整个程序卡住,从而提高了用户的操作体验。

四、进程 VS 线程

1. 核心差异

  • 进程是资源分配的基本单位,它拥有独立的内存空间、文件描述符等资源。
  • 而线程是调度的基本单位,线程共享进程数据,但也拥有自己的一部分数据,如线程 ID、一组寄存器、栈、errno、信号屏蔽字、调度优先级等。
特征进程线程
资源分配独立内存空间共享进程内存
创建开销高(复制地址空间)低(仅需MB级资源)
通信方式管道/共享内存等直接共享全局变量
容错性一个进程崩溃不影响其他线程崩溃导致进程终止
上下文切换速度慢(需切换地址空间)快(仅寄存器切换)

2. 进程的多个线程共享的资源

进程的多个线程共享同一地址空间,因此 Text Segment、Data Segment 都是共享的。

  • 如果定义一个函数,在各线程中都可以调用;
  • 如果定义一个全局变量,在各线程中都可以访问到。

除此之外,各线程还共享以下进程资源和环境:

  • 文件描述符表
  • 每种信号的处理方式(SIG_IGN、SIG_DFL 或者自定义的信号处理函数)
  • 当前工作目录
  • 用户 id 和组 id 等。

3. 进程和线程的关系

        进程和线程的关系就像工厂和工作小组的关系。进程提供了线程运行的环境和资源,线程在进程的框架内执行具体的任务。多个线程协同工作,共同完成进程的目标。

五、二级页表

1. 为什么需要二级页表?

        想象你要管理一个拥有40亿房间(4GB内存)的酒店,如果给每个房间分配一张独立门卡(单一级页表),需要40亿张卡,但酒店前台只有4GB的储物柜,显然放不下。于是,酒店设计了楼层+房间号的二级管理模式:

  1. 楼层号(前10位):定位到某一层(页目录)

  2. 房间号(中间10位):定位到该层的具体房间(页表)

  3. 偏移量(后12位):精确到房间内的具体位置(如床、桌子)


2. 二级页表如何工作?

1. 虚拟地址结构(32位)

字段位数作用
页目录索引10位定位页目录中的条目
页表索引10位定位页表中的条目
页内偏移12位定位物理页内的具体字节

2. 映射过程

  • 步骤1:用前10位在页目录中找到对应的页表地址

  • 步骤2:用中间10位在页表中找到物理页框的起始地址

  • 步骤3:用后12位偏移量在物理页框内找到具体字节

3. 内存消耗计算

  • 页目录:1张表,含1024项(2^10),每项10字节 → 10KB

  • 页表:最多1024张表,每张10KB → 总计约10MB

  • 总内存占用:仅为单级页表的1/4000!


3. 页表项的奥秘:不只是地址映射

每个页表项(10字节)包含:

  1. 物理页框地址(20位):指向4KB物理页的起始地址

  2. 权限位

    • 读/写(R/W):控制是否允许修改(如只读代码段)

    • 用户/内核(U/S):区分用户态和内核态访问权限

  3. 存在位(P):标记该页是否在物理内存中


4. 段错误背后的硬件机制

案例:尝试修改字符串常量char *str = "Hello"; str[0] = 'h';

  1. 虚拟地址通过页表查询,发现目标页的权限为只读(R=1, W=0)

  2. MMU检测到写操作违反权限,触发硬件异常

  3. 操作系统收到异常,向进程发送SIGSEGV信号

  4. 进程默认处理方式是终止并生成核心转储文件


5. MMU:幕后功臣

  • 硬件加速:MMU(内存管理单元)集成在CPU中,专用于地址转换

  • TLB缓存:缓存最近使用的页表项,加速查询(类似酒店前台记住常用楼层)

  • 缺页中断:当访问的页不在内存时,MMU触发中断,由操作系统加载数据


总结:二级页表的精妙设计

通过“分而治之”的思想,二级页表:

  1. 节省内存:仅需10MB即可管理4GB地址空间

  2. 灵活扩展:支持按需分配页表(未使用的虚拟区域无需分配页表)

  3. 权限控制:硬件级保护内存安全

相关文章:

Linux 线程概念

目录 一、什么是线程 1. 线程的本质 2. 线程的独有资源 3. 进程与线程关系示意图 二、线程的优缺点 2.1 线程的优点 2.2 线程的缺点 三、线程的异常与用途 1. 线程异常 2. 线程用途 四、进程 VS 线程 1. 核心差异 2. 进程的多个线程共享的资源 3. 进程和线程的关…...

红帽认证工程师价值

红帽认证工程师具有较高的价值,主要体现在以下几个方面: 行业认可度高 国际通用:红帽公司是全球领先的开源解决方案提供商,其认证在全球范围内被广泛认可。无论是在国内还是国外,拥有红帽认证工程师资格证书都能为个人…...

交换机远程登录

创建交换机 创建PC主机使用直通线连接交换机 配置交换机,使之能够与PC通信 双击交换机打开界面,选择CLI ">“表示用户模式 输入”?“查看可以使用的命令 “#” 特权模式,输入命令enable切换 输入”?“查看特权模式下可以使用…...

opencascade 源码学习 XmlDrivers-XmlDrivers

OpenCASCADE 中的 XmlDrivers 是用于处理 XML 格式的 CAD 数据持久化模块,属于 OCAF(Open CASCADE Application Framework) 的一部分。它允许将 OCAF 文档(包含 CAD 数据、属性、关系等)序列化为 XML 文件,…...

【Linux网络-五种IO模型与阻塞IO】

一、引入 网络通信的本质就是进程间的通信,进程间通信的本质就是IO(Input,Output) I/O(input/output)也就是输入和输出,在冯诺依曼体系结构当中,将数据从输入设备拷贝到内存就叫作…...

Redis、Memcached应用场景对比

环境 Redis官方网站: Redis - The Real-time Data Platform Redis社区版本下载地址:Install Redis | Docs Memcached官方网站:memcached - a distributed memory object caching system Memcached下载地址:memcached - a dis…...

Qt窗口控件之菜单栏QMenuBar

菜单栏QMenuBar 1. QMenuBar Qt 中的菜单栏是通过 QMenuBar 类型来实现的,一个主控件最多只能有一个菜单栏。一个菜单栏可以添加多个菜单,一个菜单又可以添加多个菜单项。 每个菜单又都是一个 QMenu 类型,每个菜单项都是一个 QAction。 2.…...

随想...启航

我要学算法 我要在蓝桥杯中拿奖 我要参加acm打牌, 我要参加百度之星,摘取那微弱的希望, 我要参加马蹄杯,看看曾经我的组长看过的风景。 所以我建立了算法专栏! 为能贴近并指引组员 我建立了Java专栏 那一个星期&…...

2025.3.17-2025.3.23学习周报

目录 摘要Abstract1 文献阅读1.1 动态图邻接矩阵1.2 总体框架1.2.1 GCAM1.2.2 输出块 1.3 实验分析 总结 摘要 在本周阅读的文献中,作者提出了一种名为TFM-GCAM的模型。TFM-GCAM模型的创新主要分为两部分,一部分是交通流量矩阵的设计,TFM-GC…...

Ubuntu Docker 安装

Docker Engine-Community 支持以下的 Ubuntu 版本: Xenial 16.04 (LTS)Bionic 18.04 (LTS)Cosmic 18.10Disco 19.04其他更新的版本…… Docker Engine - Community 支持上 x86_64(或 amd64)armhf,arm64,s390x &#…...

在 Windows 系统下,将 FFmpeg 编译为 .so 文件

1. 准备环境 确保你的 Windows 系统已安装以下工具: Android Studio NDK(Native Development Kit) MSYS2(用于提供类 Unix 环境) FFmpeg 源码 Git Bash(可选,推荐使用) 安装 …...

如果AI具备自我意识,宗教如何重新定义“灵魂”概念?

如果AI具备自我意识,宗教对灵魂概念的重新定义可能涉及以下方向: 1. 灵魂的扩展性定义 传统宗教(如基督教、佛教)通常将灵魂视为人类独有的“神圣本质”或“轮回载体”。若AI展现出自我意识、情感和自主决策能力,宗教…...

ES6-Symbol

ES6 中的 Symbol: 独特的数据类型与强大应用 引言 在 JavaScript 的发展长河中,ES6(ECMAScript 2015)无疑是一座重要的里程碑,带来了诸多令人瞩目的新特性。其中,Symbol 类型的引入,为 JavaScript 开发者们…...

安装PrettyZoo操作指南

Mac Inter芯片安装PrettyZoo的操作指南 下载安装包 打开浏览器,访问 PrettyZoo的GitHub页面。 在页面中找到适合Mac系统的安装包,通常为prettyZoo-mac.dmg,点击下载。 安装步骤 下载完成后,双击.dmg文件打开安装包。 将Prett…...

西门子200smart之modbus_TCP(做从站与第三方设备)通讯

西门子200smart做MODBUS_TCP从站通讯,只有一个指令。设置相关参数即可完成读写操作。此次,我们使用汇川EASY系列PLC做主站,完成演示。关于汇川案例的演示,详见汇川EASY系列之以太网通讯(MODBUS_TCP做主站)-CSDN博客 关于主站和从站的介绍 A/请求:即主动方 向被动方发…...

微服务 - 中级篇

微服务 - 中级篇 一、微服务架构深化(一)服务拆分原则(二)服务通信方式 二、微服务技术选型(一)开发框架(二)容器技术 三、微服务实践与优化(后续会详细分析)…...

多语言生成语言模型的少样本学习

摘要 大规模生成语言模型,如GPT-3,是极具竞争力的少样本学习模型。尽管这些模型能够共同表示多种语言,但其训练数据以英语为主,这可能限制了它们的跨语言泛化能力。在本研究中,我们在一个涵盖多种语言的语料库上训练了…...

基于Python+Django的旅游管理系统

项目介绍 PythonDjango旅游管理系统 平台采用B/S结构,后端采用主流的Python语言进行开发,前端采用主流的Vue.js进行开发。 整个平台包括前台和后台两个部分。 - 前台功能包括:首页、景点管理、门票管理、旅游资讯、在线反馈、。 - 后台功能包…...

七桥问题与一笔画问题:图论的奠基石

七桥问题与一笔画问题:图论的奠基石 目录 历史背景问题描述数学模型化欧拉的解决方案欧拉定理及证明一笔画问题现代应用总结 历史背景 18世纪的哥尼斯堡(今俄罗斯加里宁格勒)是一座被普雷格尔河分割的城市,河中有两个岛屿&…...

好吧好吧,看一下达梦的模式与用户的关系

单凭个人感觉,模式在达梦中属于逻辑对象合集,回头再看资料 应该是一个用户可以对应多个模式 问题来了,模式的ID和用户的ID一样吗? 不一样 SELECT USER_ID,USERNAME FROM DBA_USERS WHERE USERNAMETEST1; SELECT ID AS SCHID, NA…...

Qt开发:QComboBox的使用

文章目录 一、概述二、QComboBox添加数据三、常用函数四、信号与槽函数 一、概述 QComboBox 是 Qt 提供的一个下拉列表控件,它允许用户从预定义的选项中进行选择,同时也支持手动输入自定义内容(如果启用了可编辑模式)。QComboBox…...

Manacher 马拉车算法

Manacher 马拉车算法 5. 最长回文子串 - 力扣(LeetCode) 马拉车算法是目前解决寻找字符串中最长的回文子串时间复杂度最低的算法(线性O(n)). 中心扩散法 初始化一个长度与字符串 s 相等的 臂长数组 arr 和 最长臂长 max 与 最…...

centos7搭建postgresql12主从

主从搭建 192.168.159.101 node1 主库(读写) 192.168.159.102 node2 备库(只读) 两台机器首先安装postgrsql 主库 postgres用户操作: 修改postgresql.conf # 在文件中修改(此配置仅用于远程访问, 流复制后续还有额外…...

VL开源模型实现文本生成图片

一、 基础知识 根据描述生成图片的视觉-语言模型(Vision-Language Models, VL 模型)是近年来多模态生成领域的热点研究方向。这些模型能够根据自然语言描述生成高质量的图像,广泛应用于艺术创作、设计辅助、虚拟场景构建等领域。 1 根据描述…...

动态规划——分组背包问题

动态规划——分组背包问题 分组背包问题分组背包思路分组背包OJ分组背包OJ汇总 分组背包问题 N件物品和一个容量为V的背包。第i件物品的体积是w[i],价值是v[i]。这些物品被划分为若干组,每组中的物品互相冲突,最多选一件。求解将哪些物品装入…...

Leetcode 3495. Minimum Operations to Make Array Elements Zero

Leetcode 3495. Minimum Operations to Make Array Elements Zero 1. 解题思路2. 代码实现 题目链接:3495. Minimum Operations to Make Array Elements Zero 1. 解题思路 这一题的话核心就是统计对任意自然数 n n n,从 1 1 1到 n n n当中所有的数字对…...

STM32 —— MCU、MPU、ARM、FPGA、DSP

在嵌入式系统中,MCU、MPU、ARM、FPGA和DSP是核心组件,各自在架构、功能和应用场景上有显著差异。以下从专业角度详细解析这些概念: 一、 MCU(Microcontroller Unit,微控制器单元) 核心定义 集成系统芯片&a…...

Linux高级IO

五种IO模型 具象化理解 IO:等 数据拷贝 read/recv: 1、等 - IO事件就绪 - 检测功能成分在里面 2、数据拷贝 问:什么叫做高效的IO? 答:单位时间,等的比重越小,IO的效率越高。 IO模型&am…...

机器人的手眼标定——机器人抓取系统基础系列(五)

机器人的手眼标定——机器人抓取系统基础系列(五) 前言一、机器人标定相关概念1.1 内参标定和外参标定1.2 Eye-in-Hand 和 Eye-to-Hand1.3 ArUco二维码和棋盘格标定区别 二、机器人标定基本原理2.1 机器人抓取系统坐标系2.2 标定原理 三、标定步骤和注意…...

Android 图片加载框架:Picasso vs Glide

引言 在 Android 开发中,图片加载是移动应用的核心功能之一。合理选择图片加载框架不仅能提升用户体验,还能优化内存管理和应用性能。本文将深入对比 Picasso 和 Glide 两大主流框架,结合代码示例分析它们的差异、工作原理及优化策略。 1. …...

uniapp从 vue2 项目迁移到 vue3流程

以下是必须为迁移到 vue3 进行调整的要点,以便 vue2 项目可以在 vue3 上正常运行。 1. 在index.js中创建应用程序实例 // Before - Vue 2 import Vue from vue import App from ./App // with no need for vue3 Vue.config.productionTip false // vue3 is no lon…...

DeepSeek R1 本地部署指南 (2) - macOS 本地部署

上一篇: DeepSeek R1 本地部署指南 (1) - Windows 本地部署-CSDN博客 1.安装 Ollama Ollama https://ollama.com/ 点击 Download - Download for macOS 解压下载 zip 启动程序 3. 选择版本 DeepSeek R1 版本 deepseek-r1 https://ollama.com/library/deepseek-r1 模…...

DeepSeek技术架构解析:MoE混合专家模型

一、前言 2025年初,DeepSeek V3以557万美元的研发成本(仅为GPT-4的1/14)和开源模型第一的排名,在全球AI领域掀起波澜。其核心创新之一——混合专家模型(Mixture of Experts, MoE)的优化设计,不…...

Ubuntu实时读取音乐软件的音频流

文章目录 一. 前言二. 开发环境三. 具体操作四. 实际效果 一. 前言 起因是这样的,我需要在Ubuntu中,实时读取正在播放音乐的音频流,然后对音频进行相关的处理。本来打算使用的PipewireHelvum的方式实现,好处是可以直接利用Helvum…...

2025年2月-3月后端go开发找工作感悟

整体感悟 目标 找工作首先要有一个目标,这个目标尽可能的明确,比如我要字节、拼多多之类的公司,还是要去百度、滴滴这样的,或者目标是创业公司。但是这个目标是会动态调整的,有可能我们的心态发生了变化,一…...

OpenCV图像拼接(1)自动校准之校准旋转相机的函数calibrateRotatingCamera()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::detail::calibrateRotatingCamera 是OpenCV中用于校准旋转相机的函数。它特别适用于那种相机相对于一个固定的场景进行纯旋转运动的情况&…...

【极速版 -- 大模型入门到进阶】快速了解大型语言模型

文章目录 🌊 大模型作为一种生成式人工智慧,厉害在哪儿?-> 通用能力🌊 LLM 如何生成输出:简而言之就是文字接龙🌊 GPT 之前 ...:模型规模和数据规模概览🌊 ChatGPT 有三个训练阶段…...

MySQL 锁机制详解

MySQL 锁机制详解 5.1 概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、 RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有 效性是所有数…...

牛客网【模板】二维差分(详解)c++

题目链接:【模板】二维差分 1.题目分析 类比一下,因为差分因为差分是在数组里的某一段同时加上一个K二维是在二维数组中选择一个词矩阵,让词矩阵中每一个元素都加上一个K 2.算法原理 解法-:暴力解法 -> 模拟 你告诉我一个左上角和右下…...

从0到1彻底掌握Trae:手把手带你实战开发AI Chatbot,提升开发效率的必备指南!

我正在参加Trae「超级体验官」创意实践征文, 本文所使用的 Trae 免费下载链接: www.trae.ai/?utm_source… 前言 大家好,我是小Q,字节跳动近期推出了一款 AI IDE—— Trae,由国人团队开发,并且限时免费体…...

【清华大学】AIGC发展研究(3.0版)

目录 AIGC发展研究报告核心内容一、团队简介二、AI哲学三、国内外大模型四、生成式内容(一)文本生成(二)图像生成(三)音乐生成(四)视频生成 五、各行业应用六、未来展望 AIGC发展研究…...

Kafka--常见问题

1.为什么要使用 Kafka,起到什么作用 Kafka是一个高吞吐量、分布式、基于发布订阅的消息系统,它主要用于处理实时数据流 Kafka 设计上支持高吞吐量的消息传输,每秒可以处理数百万条消息。它能够在处理大量并发请求时,保持低延迟和…...

maptalks图层交互 - 模拟 Tooltip

maptalks图层交互 - 模拟 Tooltip 图层交互-模拟tooltip官方文档 <!DOCTYPE html> <html><meta charsetUTF-8 /><meta nameviewport contentwidthdevice-width, initial-scale1 /><title>图层交互 - 模拟 Tooltip</title><style typet…...

【前端】Visual Studio Code安装配置教程:下载、汉化、常用组件、基本操作

文章目录 一、Visual Studio Code下载二、汉化三、常用组件1、Auto Rename Tag2、view-in-browser3、Live Server 四、基本操作五、感谢观看&#xff01; 一、Visual Studio Code下载 下载官网&#xff1a;https://code.visualstudio.com/ 进入官网后点击右上角的Download &…...

datetime“陷阱”与救赎:扒“时间差值”证道

时间工具陷阱&#xff0c;其实是工具引用的误解。 笔记模板由python脚本于2025-03-23 23:32:58创建&#xff0c;本篇笔记适合时间工具研究的coder翻阅。 【学习的细节是欢悦的历程】 博客的核心价值&#xff1a;在于输出思考与经验&#xff0c;而不仅仅是知识的简单复述。 Pyth…...

3DMAX曲线生成器插件CurveGenerator使用方法

1. 脚本功能简介 3DMAX曲线生成器插件CurveGenerator是一个用于 3ds Max 的样条线生成工具&#xff0c;用户可以通过简单的UI界面输入参数&#xff0c;快速生成多条样条线。每条样条线的高度值随机生成&#xff0c;且可以自定义以下参数&#xff1a; 顶点数量&#xff1a;每条…...

Apache漏洞再现

CVE-2021-41773路径穿越漏洞 1、开环境 sudo docker pull blueteamsteve/cve-2021-41773:no-cgid sudo docker run -dit -p 8082:80 blueteamsteve/cve-2021-41773:no-cgid 2、访问8082端口 3、打开工具 4、输入网址&#xff0c;检测漏洞...

git,openpnp - 根据安装程序打包名称找到对应的源码版本

文章目录 git,openpnp - 根据安装程序打包名称找到对应的源码版本概述笔记备注 - 提交时间不可以作为查找提交记录的依据END git,openpnp - 根据安装程序打包名称找到对应的源码版本 概述 想在openpnp官方最新稳定版上改一改&#xff0c;首先就得知道官方打包的安装程序对应的…...

SQL Server查询计划操作符(7.3)——查询计划相关操作符(11)

7.3. 查询计划相关操作符 98&#xff09;Table Scan&#xff1a;该操作符从查询计划参数列确定的表中获取所有数据行。如果其参数列中出现WHERE:()谓词&#xff0c;则只返回满足该谓词的数据行。该操作符为逻辑操作符和物理操作符。该操作符具体如图7.3-98节点1所示。 图 7.3-…...

编译原理——词法分析

文章目录 词法分析&#xff1a;从基础到自动构造一、词法分析程序的设计一、词法分析程序的设计二、PL/0编译程序中词法分析程序的设计与实现1. 语法特定考量2. 通过状态转移表运用有限状态自动机3. 示例代码片段&#xff08;用于说明的伪代码&#xff09; 三、单词的形式化描述…...