三:操作系统线程管理之线程概念
揭秘幕后英雄:理解线程的奥秘与优势
在当今软件应用的世界里,流畅的用户体验、高效的后台处理以及强大的并发能力已经成为必备的要求。你有没有想过,一个看似简单的程序是如何在同一时间处理多个任务的?或者为什么一个复杂的应用在执行耗时操作时,界面仍然可以响应用户的输入?答案之一,就藏在“线程”这个概念里。
今天,我们就来深入探讨一下线程这个计算机科学中的重要概念,理解它是什么,它与进程有何不同,以及为什么多线程能力如此重要。
1. 什么是线程?深入理解“进程内的执行单元”
想象一下,你正在电脑上运行一个程序,比如一个文字处理器。这个文字处理器本身就是一个进程(Process)。进程是操作系统进行资源分配和调度的基本单位,它拥有独立的内存空间、文件句柄、设备等资源。可以把进程看作是一个独立的“工厂”,它有自己的厂房、设备、原材料仓库,与其他工厂完全隔离开来。
那么,**线程(Thread)**是什么呢?
简单来说,线程是进程内的执行单元,是CPU调度的基本单位。一个进程可以包含一个或多个线程。如果把进程比作一个工厂,那么线程就是在这个工厂里工作的工人。
- 每个工人(线程)都有自己的任务(执行的代码)。
- 他们共享工厂(进程)的资源,比如厂房空间(进程的内存地址空间)、设备(打开的文件、网络连接)。
- 每个工人有自己的工作台和工具箱(线程独有的栈、寄存器状态)。
因为线程共享进程的资源,创建和切换线程的开销比创建和切换进程要小得多,所以线程也被称为轻量级进程(Lightweight Process)。
核心要点:
- 进程: 资源分配的基本单位,拥有独立资源,是重量级的。
- 线程: CPU调度的基本单位,进程内的执行单元,共享进程资源,是轻量级的。
一个单线程的进程只有一个工人,他必须按顺序完成所有任务。而一个多线程的进程可以有多个工人同时工作(在多核CPU上是真正同时,在单核CPU上是快速切换执行),从而提高效率。
2. 线程与进程:区别与联系(共享资源 vs 独立资源)
理解线程,绕不开与进程的比较。虽然线程是进程的一部分,但它们在资源拥有和调度方面有着显著的区别。
特性 | 进程 (Process) | 线程 (Thread) |
---|---|---|
资源拥有 | 独立拥有资源(内存空间、文件句柄、设备等) | 共享所属进程的资源(内存空间、文件句柄等) |
调度单位 | 操作系统分配资源的基本单位 | 操作系统进行CPU调度的基本单位 |
独立性 | 独立运行,进程之间相互隔离 | 依赖于进程,同一进程的线程间相互影响(如一个线程崩溃可能影响整个进程) |
创建/销毁 | 开销较大,需要分配/回收独立资源 | 开销较小,只需分配/回收少量资源(如栈) |
切换开销 | 开销较大(需要切换整个进程的上下文) | 开销较小(只需切换线程的寄存器和栈指针等) |
通信方式 | 需要专门的进程间通信(IPC)机制,如管道、信号量、共享内存等 | 直接读写进程共享的内存数据,更便捷(但需要同步机制) |
默认数量 | 至少包含一个主线程 | 一个进程可以有多个线程 |
联系:
- 包含关系: 线程存在于进程之内,是进程的子集。一个进程至少包含一个线程。
- 生命周期: 线程的生命周期受其所属进程的限制。进程结束,其内部的所有线程也随之结束。
- 资源基础: 线程执行所需的资源(如内存空间)由其所属的进程提供。
举例说明:
假设你打开了两个独立的应用程序:一个浏览器和一个音乐播放器。
- 浏览器是一个进程 A。它有自己独立的内存区域,加载了浏览器代码,打开了网页文件,建立了网络连接。
- 音乐播放器是另一个进程 B。它也有独立的内存区域,加载了播放器代码,打开了音频文件,与声卡交互。
- 进程 A 和进程 B 之间的资源是隔离的,一个崩溃通常不会直接影响另一个。它们之间的通信需要通过操作系统提供的 IPC 机制。
现在,看看浏览器这个进程 A 内部。当你同时打开了多个标签页,并且在一个标签页播放视频,另一个标签页加载网页,还有一个标签页下载文件时:
- 播放视频可能是一个线程 T1 在处理。
- 加载网页可能是一个线程 T2 在处理。
- 下载文件可能是一个线程 T3 在处理。
- 还有一个主线程 T0 负责处理用户的界面交互,如点击按钮、滚动页面。
这些线程 T0, T1, T2, T3 都属于同一个浏览器进程 A。它们共享进程 A 的内存空间(因此可以方便地访问同一个网页数据、缓存等),共享进程 A 打开的文件句柄和网络连接。如果 T1(视频播放线程)因为某种原因崩溃,它可能会导致整个浏览器进程 A 崩溃(因为线程共享资源,一个线程的错误可能破坏共享状态)。它们之间的通信可以直接通过读写共享内存中的变量来实现(但这需要小心处理,避免冲突)。
这个例子清晰地展示了:进程提供了独立的资源环境,而线程则在同一个资源环境中协同工作。
3. 多线程的优势:为什么我们需要多个工人?
既然线程的创建和管理带来了一些复杂性(比如后面会提到的同步问题),为什么我们还要使用多线程呢?主要有以下几个显著优势:
3.1 提高并发度 (Concurrency)
并发是指多个任务看起来在同时进行。在单核CPU时代,这是通过CPU快速在不同线程之间切换(即时间片轮转或上下文切换)实现的,虽然在微观上CPU一次只执行一个线程的代码,但在宏观上,多个任务都在向前推进。在多核CPU时代,不同的线程可以被分配到不同的CPU核心上,从而实现真正的并行(Parallelism),多个任务是真正在同一时刻被执行的。
举例:
假设你是一个网站的服务器。有100个用户同时发来了请求。
- 单线程服务器: 只能一个接一个地处理请求。第一个请求处理完(可能包括读取数据库、调用其他服务等耗时操作)才能处理第二个。用户可能需要等待很长时间。
- 多线程服务器: 每接收到一个新请求,就创建一个新的线程去处理它(或者从线程池中分配一个)。这样,100个请求就可以在多个线程上并发执行。即使某个线程因为等待数据库响应而阻塞,其他线程仍然可以继续处理其他请求,大大提高了服务器同时处理请求的能力。
3.2 提高响应速度 (Responsiveness)
在很多应用中,特别是带有用户界面的应用,多线程可以避免因为执行耗时操作而导致界面“卡死”的问题。
举例:
你正在使用一个图片编辑软件,点击了一个“应用滤镜”的按钮,这个操作非常耗时(比如需要计算几百万个像素)。
- 单线程应用: 如果图片处理逻辑在主线程(UI线程)中执行,那么在处理完成之前,整个界面将停止响应,你不能点击其他按钮,不能拖动窗口,就像程序死了一样。
- 多线程应用: 图片处理逻辑在一个独立的后台线程中执行。主线程(UI线程)在启动后台线程后立即返回,继续处理用户的界面事件。这样,用户界面依然可以响应,你可以看到处理进度条,甚至可以取消操作,而不会感到程序卡顿。这就是多线程带来的流畅体验。
3.3 提高资源利用率 (Resource Utilization)
多线程可以更有效地利用系统资源,特别是CPU。
举例:
一个程序在执行过程中,经常需要进行I/O操作(如读写文件、网络通信)。I/O操作通常比CPU计算慢得多,当一个线程执行I/O操作时,它往往会进入阻塞状态,等待I/O完成。
- 单线程: 当这个唯一的线程阻塞等待I/O时,CPU就可能处于空闲状态,没有其他任务可做。
- 多线程: 当一个线程因为I/O而阻塞时,操作系统可以将CPU时间片分配给同一个进程中的其他非阻塞线程,让它们继续执行计算任务。这样,CPU就不会因为等待一个线程的I/O而闲置,提高了CPU的利用率。
总结来说,多线程的主要优势在于:
- 能够同时处理多个任务(并发/并行)。
- 保持程序在执行耗时任务时的响应性。
- 更有效地利用CPU和其他系统资源。
结语
线程作为进程内的执行单元,是实现程序并发和提高效率的重要手段。通过共享进程资源,线程的创建和切换开销更低,使得在同一个程序内部实现多任务协同工作成为可能。理解线程与进程的区别与联系,掌握多线程带来的并发度、响应速度和资源利用率的提升,对于开发高性能、用户体验友好的现代软件至关重要。
当然,多线程编程也并非没有挑战,线程间的资源共享带来了同步问题(如数据竞争),需要使用锁、信号量等机制来保证数据的正确性。但这已经是另一个深入的话题了。
相关文章:
三:操作系统线程管理之线程概念
揭秘幕后英雄:理解线程的奥秘与优势 在当今软件应用的世界里,流畅的用户体验、高效的后台处理以及强大的并发能力已经成为必备的要求。你有没有想过,一个看似简单的程序是如何在同一时间处理多个任务的?或者为什么一个复杂的应用…...
学习黑客Active Directory 入门指南(一)
Active Directory 入门指南(一):初识AD与核心概念 🔑 大家好!欢迎来到 “Active Directory 入门指南” 系列的第一篇。在本系列中,我们将逐步深入探索 Windows Active Directory (AD)——微软推出的目录服…...
单列集合——ArrayList,LinkedList,迭代器的底层原理和源码
ArrayList 底层原理 空参构造创建集合时候,创建长度为零的数组名叫elementData,还有个成员变量size用来记录元素的个数,第一次空参,size长度是0。 添加第一个元素时,底层创建新的长度尾10的数组,数组中默认…...
C++模板进阶使用技巧
非类型模板参数缺省模板参数类模板特化全特化偏特化 模板的分离编译 我们在前面已经初识了 模板并且在各种数据结构的实现中,熟练掌握了模板的一些基础功能。 至于为什么是基础功能,因为模板还有一些进阶的功能,像非类型模板参数,…...
jqGrid冻结列错行问题,将冻结表格(悬浮表格)与 正常表格进行高度同步
在使用jqGrid时,如果你遇到了冻结列(也称为冻结表格或悬浮表格)与正常表格高度不同步的问题,这通常是由于CSS样式或者布局管理不当所导致的。下面是一些解决此问题的步骤和建议: 1. 确保CSS样式正确 首先,确…...
Milvus(25):搜索迭代器、使用分区密钥
1 搜索迭代器 ANN Search 对单次查询可调用的实体数量有最大限制,因此仅使用基本 ANN Search 可能无法满足大规模检索的需求。对于 topK 超过 16,384 的 ANN Search 请求,建议考虑使用 SearchIterator。 1.1 概述 Search 请求返回搜索结果,而…...
深入探索PointNet:点云处理的革命性算法
深入探索PointNet:点云处理的革命性算法 在计算机视觉和三维图形处理领域,点云数据的处理一直是一个极具挑战性的任务。点云数据由一系列三维坐标点组成,这些点通常来源于激光雷达(LiDAR)、三维扫描仪等设备。与图像数…...
四品种交易策略
策略概述 策略思路: 交易品种:同时交易四个品种,每个品种使用总资金的10%。 合约选择:使用连续合约(data0)发出交易信号,实际交易 主力合约(data1)和下一个主力合约(data2)。 资金管理:总资金用A_CurrentEquity表示,交易手数据此计算。 止损执行:盘中达到止损…...
NC61 两数之和【牛客网】
文章目录 零、原题链接一、题目描述二、测试用例三、解题思路3.1 排序双指针3.1 散列 四、参考代码4.1 排序双指针4.2 散列 零、原题链接 NC61 两数之和 一、题目描述 二、测试用例 三、解题思路 3.1 排序双指针 基本思路: 先对序列进行排序,然后…...
电子电路:什么是电流离散性特征?
关于电荷的量子化,即电荷的最小单位是电子的电荷量e。在宏观电路中,由于电子数量极大,电流看起来是连续的。但在微观层面,比如纳米器件或单电子晶体管中,单个电子的移动就会引起可观测的离散电流。 还要提到散粒噪声,这是电流离散性的表现之一。当电流非常小时,例如在二…...
如何完美安装GPU版本的torch、torchvision----解决torch安装慢 无法安装 需要翻墙安装 安装的是GPU版本但无法使用的GPU的错误
声明: 本视频灵感来自b站 如何解决所述问题 如何安装对应版本的torch、torchvison 进入pytorch官网 进入历史版本 这里以cuda11.8 torch 2.1.0为例演示 根据文档找到要安装的torch、torchvison版本 但不是使用命令行直接安装 命令行直接安装可能面临着 安装慢…...
Fine-Tuning Llama2 with LoRA
Fine-Tuning Llama2 with LoRA 1. What is LoRA?2. How does LoRA work?3. Applying LoRA to Llama2 models4. LoRA finetuning recipe in torchtune5. Trading off memory and model performance with LoRAModel ArgumentsReferences https://docs.pytorch.org/torchtune/ma…...
Compose笔记(二十五)--Brush
这一节主要了解一下Compose中Brush,在Jetpack Compose里,Brush是一个重要的 API,它用于定义填充图形的颜色渐变或图案,能够为界面元素添加丰富的视觉效果。简单总结如下: 1 常见场景 填充形状(圆形、矩形等) 创建渐变…...
访问共享打印机提示错误0x00000709多种解决方法(支持win10和win11)
在日常办公和生活中,打印机是不可或缺的重要设备。然而,有时在连接打印机的过程中,我们可能会遇到错误代码0x00000709的提示。有更新补丁导致的、有访问共享打印机服务异常、有访问共享打印机驱动异常等问题导致的,针对访问共享打…...
【Mini 型 http 服务器】—— int get_line(int sock, char *buf, int size);
作用: 逐行读取并返回读取的内容长度,取出读取的内容保存在 buf 数组中 输入: int sock:需要读取的 sock 套接字 char *buf:用于记录保存读取的内容 int size:buf 的大小 返回值: -1 表示 读取…...
Window远程连接Linux桌面版
Window远程连接Linux桌面版 卸载RealVNC Server 一、确认是否安装了 VNC Server 先检查是否已安装: which vncserver # 或 dpkg -l | grep vnc # 或 rpm -qa | grep vnc二、在 Debian / Ubuntu 上卸载(.deb 安装) 1. 卸载 RealVNC Serve…...
计算机系统---TPU(张量处理单元)
一、定义与定位 TPU(Tensor Processing Unit) 是由Google开发的专用AI加速芯片,专为深度学习中的张量运算(如矩阵乘法、卷积)设计,属于ASIC(专用集成电路)范畴。其核心目标是在算力…...
5.18 day24
知识点回顾: 元组可迭代对象os模块 作业:对自己电脑的不同文件夹利用今天学到的知识操作下,理解下os路径。 元组 元组的特点: 有序,可以重复,这一点和列表一样 元组中的元素不能修改,这一点…...
Filament引擎(一) ——渲染框架设计
filament是谷歌开源的一个基于物理渲染(PBR)的轻量级、高性能的实时渲染框架,其框架架构设计并不复杂,后端RHI的设计也比较简单。重点其实在于项目中材质、光照模型背后的方程式和理论,以及对它们的实现。相关的信息,可以参考官方…...
区间带边权并查集,XY4060泄露的测试点
目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 码蹄集 二、解题报告 1、思路分析 关于带边权并查集:并查集&…...
虚幻引擎5-Unreal Engine笔记之Pawn与胶囊体的关系
虚幻引擎5-Unreal Engine笔记之Pawn与胶囊体的关系 code review! 文章目录 虚幻引擎5-Unreal Engine笔记之Pawn与胶囊体的关系1. 什么是Pawn?2. 什么是胶囊体(Capsule Component)?3. Pawn与胶囊体的具体关系(1&#x…...
USB学习【11】STM32 USB初始化过程详解
1.USB HAL库里面的结构体 为了管理USB,HAL首先构建了一下几个结构体 1.1 USBD设备结构体 USB用到的全局变量,保存了USB生命周期的全部信息。 1.2 USBD PCD底层硬件操作相关结构体 1.3 USB 配置结构体 USB速度、PHY接口类型、端点0参数等 1.4 端点配置…...
Estimation(估算):业务分析师的“不确定性对抗术”
在变化中给出最靠谱的预判。 当面对项目排期模糊、资源计划混乱、老板催问“多久能搞定”的时候, 我总会说:“别着急,我们先做个 Estimation。” 因为,没有靠谱的估算,承诺和资源分配就是空中楼阁。 什么是 Estimati…...
【MyBatis-11】MyBatis批处理:提升数据操作性能的利器
1. 批处理概述 在数据密集型应用中,频繁的单条数据操作会导致严重的性能问题。MyBatis批处理技术通过将多个SQL语句组合成一个批处理单元,显著减少与数据库的交互次数,从而大幅提升数据操作效率。 1.1 为什么需要批处理? 减少网…...
MyBatis 核心技术详解:从连接池到多表查询
一、MyBatis 连接池:提升数据库访问效率 1. 连接池的本质与作用 本质:连接池是存储数据库连接的 “容器”,负责创建、管理连接,避免频繁创建 / 销毁连接带来的性能损耗。核心问题:若无连接池,每次执行 SQ…...
2025.05.17得物机考笔试真题第一题
📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 01. 魔法浮石逃生记 问题描述 LYA 不慎闯入了一片禁忌湖泊,现在她需要踩着湖中的魔法浮石迅速逃离。湖中有 n n n...
时序数据库、实时数据库与实时数仓:如何为实时数据场景选择最佳解决方案?
随着物联网、金融交易、在线游戏等场景对实时数据处理需求的增长,市场上涌现出多种专门针对实时数据处理的数据库解决方案。然而,面对时序数据库、实时数据库和实时数据仓库这三种看似相似的技术,许多技术决策者常常感到困惑:它们…...
构建一个“湖仓一体”(Data Lakehouse)系统
构建一个“湖仓一体”(Data Lakehouse)系统,关键是融合数据湖(Data Lake)的灵活性与数据仓库(Data Warehouse)的高性能分析能力。下面是构建流程的核心步骤: 一、总体架构设计 分层架…...
【C++】尾置返回类型(Trailing Return Type)总结
尾置返回类型(Trailing Return Type)是 C11 引入的一种函数返回类型声明方式,允许将返回类型放在函数参数列表之后,使用 -> 符号指定。这种语法在模板编程、Lambda 表达式和复杂类型推导时特别有用。 1. 基本语法 auto func(参…...
[人月神话_6] 另外一面 | 一页流程图 | 没有银弹
另外一面(The other face) 计算机程序是人类向机器传递信息的一种方式,为了确保意图能够被无言的机器准确理解,程序采用了严格的语法和精确的定义。(这就需要 我们有严密的逻辑思维) 然而,除了…...
GO学习指南
GO学习指南 主题一 go语言基础知识讲解 go语言面向对象编程 go语言接口详解 go语言协程 后续内容请大家持续关注,每月一主题,让各位读者能零基础、零成本学习go语言...
【机器学习】逻辑回归
文章目录 一、逻辑回归概述1.定义2.原理 二、Sigmoid函数三、梯度上升算法四、实验1.代码2.运行结果3.实验小结 一、逻辑回归概述 1.定义 Logistic回归是一种广义线性回归(generalized linear model),因此与多重线性回归分析有很多相同之处…...
Nginx配置与命令
Nginx 配置文件基础 全局块(Main Context):配置影响全局的参数,如用户、进程数、日志路径等。 user nginx; # 运行Nginx的用户和组 worker_processes auto; # 工作进程数(通常设为CPU核心数&…...
测试--测试分类 (白盒 黑盒 单元 集成)
一、按照测试目标分类(测试目的是什么) 主类别细分说明1. 界面测试UI内容完整性、一致性、准确性、友好性,布局排版合理性,控件可用性等2. 功能测试检查软件功能是否符合需求说明书,常用黑盒方法:边界值、…...
工作流介绍
了解工作流对大模型进行高质量工作的辅助意义学会复现吴恩达博士的翻译工作流开源项目了解构成大模型工作流系统的关键元素学会搭建一个更复杂的业务场景工作流 一、为什么我们需要工作流? ❓ 什么样的职场打工人是合格的打工人? 反应快,理…...
学习黑客Active Directory 入门指南(五)
Active Directory 入门指南(五):管理工具、安全基础与学习路径 🛠️🛡️📚 大家好!欢迎来到 “Active Directory 入门指南” 系列的最后一篇。在前四篇中,我们已经全面探讨了Active…...
【第三篇】 SpringBoot项目中的属性配置
简介 SpringBoot支持多种配置文件格式,包括application.properties、yml和yaml等。本文章将详细介绍这三种配置文件的内容格式和详细用法,以及在程序中如何对配置文件中的属性进行读取。文章内容若存在错误或需改进的地方,欢迎大家指正&#…...
处理金融数据,特别是股票指数数据,以计算和分析RSRS(相对强度指数)
Python脚本,用于处理金融数据,特别是股票指数数据,以计算和分析RSRS(相对强度指数)指标。以下是代码的逐部分解释: 1. **导入库**: - `pandas`:用于数据处理和CSV文件操作。 - `numpy`:用于数值计算。 - `ElasticNet`:来自`sklearn.linear_model`,用于线性…...
C++面试2——C与C++的关系
C与C++的关系及核心区别的解析 一、哲学与编程范式:代码组织的革命 过程式 vs 多范式混合 C语言是过程式编程的典范,以算法流程为中心,强调“怎么做”(How)。例如,实现链表操作需手动管理节点指针和内存。 C++则是多范式语言,支持面向对象(OOP)、泛型编程(模板)、函…...
Linux云计算训练营笔记day10(MySQL数据库)
Linux云计算训练营笔记day10(MySQL数据库) 目录 Linux云计算训练营笔记day10(MySQL数据库)ifnull别名聚合函数group byHAVING 子查询关联查询 ifnull 在DQL语句中可以使用函数或表达式 函数 IFNULL(arg1,arg2) 如果arg1为NULL,函…...
深度解析:AWS NLB 与 ALB 在 EKS 集群中的最佳选择
前言 AWS 提供多种弹性负载均衡器,包括应用程序负载均衡器 (ALB)、网络负载均衡器 (NLB)、网关负载均衡器 (GWLB) 和经典负载均衡器 (CLB)。本文重点介绍 ALB 和 NLB,因为它们是 EKS 集群最相关的选项。 在确定合适的负载均衡器类型时,需要…...
nginx模块使用、过滤器模块以及handler模块
一、如何使用nginx的模块 1.ngx_code.c: #include "ngx_config.h" #include "ngx_conf_file.h" #include "nginx.h" #include "ngx_core.h" #include "ngx_string.h" #include "ngx_palloc.h" #include "n…...
基于PageHelper的分页查询
基于PageHelper的分页查询 ‘PageHelper是基于java的一个开源框架,用于在MyBatis等持久层框架中方便地进行分页查询操作。它提供了一组简单易用的API和拦截器机制,可以帮助开发者快速集成和使用分页功能。 PageHelper的主要功能包括: 分页…...
Linux518 YUM源仓库回顾(需查)ssh 服务配置回顾 特定任务配置回顾
计划配仓库YUM源 为什么我在/soft文件夹下 使用yum install --downloadonly --downloaddir /soft samba 为什么文件夹下看不到samba文件 exiting because “Download Only” specified 计划过 计划配SSH 参考 ok了 计划配置特定任务解决方案 code: 两端先配好网络 测试好s…...
AI 制作游戏美术素材流程分享(程序员方向粗糙版)
AI 制作游戏美术素材分享(程序员方向粗糙版) 视频讲解: 抖音:https://www.douyin.com/user/self?from_tab_namemain&modal_id7505691614690561295&showTabpost Bilibili: https://www.bilibili.com/video/BV1ojJGzZEve/ 写在最前面: 本方法比较粗糙,只对对美术风…...
山东大学计算机图形学期末复习12——CG13下
CG13下 BSP树 BSP (Binary Space Partition)表示二叉空间分割。 使用这种方法可以使我们在运行时使用一个预先计算好的树来得到多边形从后向前的列表,它的复杂度为O(n)。 它的基本思想是基于这样一个事实:任何平面都可以将空间分…...
Muduo网络库大总结
Muduo网络库大总结 目录 目的知识储备IO模型 阻塞与非阻塞五种IO模型 epoll原理 select/poll的缺点epoll的优势LT与ET模式 Reactor模型muduo核心模块扩展功能 目的 理解阻塞、非阻塞、同步、异步的概念掌握Unix/Linux五种IO模型深入理解epoll原理及优势掌握Reactor模型设计学…...
LLMs:《POE报告:2025年春季人工智能模型使用趋势》解读
LLMs:《POE报告:2025年春季人工智能模型使用趋势》解读 导读:2025年5月13日,该报告基于 Poe 平台的用户数据,分析了 2025 年春季人工智能模型的使用趋势。报告指出,人工智能格局快速演变,通用文…...
机器学习(13)——LGBM(2)
一、LightGBM算法简介 (一)背景 机器学习中的树模型 在机器学习领域,基于树的模型(如决策树、随机森林、梯度提升树等)是非常重要的算法类别。它们具有很强的可解释性,能够很好地处理非线性关系ÿ…...
翻到了一段2005年写的关于需求的文字
那时的俺还很稚嫩,很多东西都不懂。 另外 hfghfghfg其实是俺的一个马甲,早年间在delphibbs时用的。 来自:hfghfghfg, 时间:2005-01-20 13:16, ID:2971188我到客户那里的情况 一边要和他聊天 一边改报表。 一张报表 …...