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

Re: Linux系统篇(十八)进程篇·三:深度硬核!全面起底 Linux 进程状态变化与内核链表动态解绑

◆ 博主名称 晓此方-CSDN博客大家好欢迎来到晓此方的博客。⭐️Linux系列个人专栏 【主题曲】Linux⭐️此方的GitHub github_此方⭐️Re系列专栏我们思考 (Rethink) · 我们重建 (Rebuild) · 我们记录 (Record)文章目录概要序論一、操作系统的“进程状态”二、Linux中的进程状态2.1进程的状态有哪些2.2调度队列FIFO算法进程运行状态2.3设备树进程的阻塞状态2.3.1什么是设备树2.3.2什么是阻塞状态2.4交换分区与进程挂起2.4.1交换分区的定义2.4.2挂起与优先挂起2.5进程的状态变化三、理解内核链表的相关话题3.1内核链表不是传统链表3.2为什么内核链表要这么设计3.2.1更方便的偏移量计算——offset宏3.2.2彻底理清“流动”的本质多链表动态解绑与重组3.2.2.1物理上它们“住在一起”3.2.2.2逻辑上它们属于“完全不同的绳子”3.2.3.3“流动”是如何发生的3.2.2.4核心总结四、进程状态的查看4.1回顾Linux的进程状态类型4.2运行R与睡眠S状态4.3停止T与追踪停止状态t4.4深度睡眠D4.4.1对比一般睡眠状态4.4.2深度睡眠的意义4.4.3测试方法概要序論Hello大家好我是此方上文我们初步探讨了[进程]这个话题了解了进程的概念和进程的父子关系今天将继续深入了解进程的各种状态好的现在我们开始吧。一、操作系统的“进程状态”如下图精辟的总结了课本上提到的进程状态确实有些复杂。不过我想要说的是这张图讲解的是操作系统的进程状态的总理论而我们今天要讲的Linux进程状态和它的关系是特殊性与普遍性的关系。二、Linux中的进程状态2.1进程的状态有哪些为了弄明白正在运行的进程是什么意思我们需要知道进程的不同状态。一个进程可以有几个状态在Linux内核里进程有时候也叫做任务。下面的状态在kernel源代码里定义/* * The task state array is a strange bitmap of reasons to sleep. * Thus running is zero, and you can test for combinations of * others with simple bit tests. */staticconstchar*consttask_state_array[]{R (running),/*0 */S (sleeping),/*1 */D (disk sleep),/*2 */T (stopped),/*4 */t (tracing stop),/*8 */X (dead),/*16 */Z (zombie),/*32 */};R运行状态running并不意味着进程一定在运行中它表明进程要么是在运行中要么在运行队列里。S睡眠状态sleeping意味着进程在等待事件完成这里的睡眠有时候也叫做可中断睡眠interruptible sleep。D磁盘休眠状态Disk sleep有时候也叫不可中断睡眠状态uninterruptible sleep在这个状态的进程通常会等待 IO 的结束。T停止状态stopped可以通过发送 SIGSTOP 信号给进程来停止T进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行。X死亡状态dead这个状态只是一个返回状态你不会在任务列表里看到这个状态。一句话都听不懂没有关系拆开来我们一个一个讲2.2调度队列FIFO算法进程运行状态在谈论进程的运行状态之前我需要先讲一讲进程的调度队列我们上一篇中讲到了进程是由PCB代码与数据构成的进程的PCB里面有一个指针指向下一个PCB于是就形成了全局进程链表。我们这里讲的队列和全局链表非常相似为什么这个它即是链表又是队列我们后面会讲。先抛出一个结论:“进程在调度队列里面进程处于运行状态”。通过进程的调度队列我们也得到一个名词“进程的FIFO算法”: 进程按照队列的规则先进先出依次被CPU调用执行。2.3设备树进程的阻塞状态2.3.1什么是设备树我们的计算机它的摄像头麦克风键盘鼠标显示器以及磁盘网卡等等一系列的硬件他们都是操作系统通过硬件驱动调用的然而硬件驱动调用硬件不是直接访问硬件本身实际上其内部也经厉了“先描述再组织的过程操作系统将他们的数据封装成为一个结构体然后将他们组织在一起于是就形成了设备树。我后来发现这一段的讲解极为不准确设备树和等待队列没有任何关系。我在后文3.2.2有纠错。2.3.2什么是阻塞状态设备树上的每一个结点都有一个等待队列输出一个结论进程在等待队列中的时候就是阻塞状态。那么什么是阻塞当一个进程正在运行但它发起的某个请求通常是 I/O 请求暂时无法得到满足或者必须等待某个事件如磁盘数据读取、网卡数据到达发生时操作系统会剥夺该进程的 CPU 使用权将其从运行队列Run Queue中移出。然后该进程就会被链入对应设备的等待队列当中。等待设备就绪。什么是就绪又一个问题。这很简单我们键盘键入硬盘读取这些都是设备就绪。2.4交换分区与进程挂起挂起首先你要知道这是一种非常极端的情况一般不会发生。什么时候会发生呢你的操作系统认识到内存资源严重不足的时候我们所讲的内存资源是“物理内存”而不是“虚拟内存”放在虚拟地址空间中讲2.4.1交换分区的定义交换分区我们首先需要了解的概念。它是磁盘中的一个概念在磁盘中有这么一块临时区域用来临时存放从内存中交换过来的代码。2.4.2挂起与优先挂起那么当程序挂起就是操作系统将程序的代码和数据从内存中提取出来挂在这个交换分区当中。以此来腾出空间给其他进程使用。缓减内存压力。这个过程中PCB不会动。那么谁会被优先带走呢答案是正在阻塞的进程。他们不着急使用CPU资源所以先挂起。在极端中的极端情况有可能运行队列中靠后的一些进程的代码和数据也会被挂起来。当然这很少见。2.5进程的状态变化从运行到阻塞从阻塞到挂起从运行到挂起以及他们的所有的反方向。在之前我们全部讲完了。现在给一张总结图三、理解内核链表的相关话题3.1内核链表不是传统链表我们Linux中的一个个PCB他们被链接起来形成一个链表这没有错但是现在我要讲的可能会颠覆你的认知。Linux内核使用的链表不是传统的链表传统的链表我们可以画一个潦草的示意图一个带头循环双向链表每一个结点里面都会有两个struct Node*指针指向上一个/下一个结点。那么Linux的内核链表呢试想一下把前后指针独立封装一下让它和你的数据解耦会发生什么这就是Linux内核链表的想法。structlist_head{structlist_head*next,*prev;};structtask_struct{intx,y,z;structlist_headlinks;...};也即是说现在这个链表本身依赖的不是指针而是这样一个连接器结构体它来帮助前后PCB建立联系。3.2为什么内核链表要这么设计3.2.1更方便的偏移量计算——offset宏现在如果你手里只有一个指向links成员的指针想要拿到整个task_struct的首地址你就必须知道links在这个结构体里“往后挪了多少距离”。结构体首地址 成员地址 − 偏移量 结构体首地址 成员地址 - 偏移量结构体首地址成员地址−偏移量有一种非常通用的计算方式o f f s e t ( ( ( s t r u c t t a s k _ s t r u c t ∗ ) 0 ) → l i n k s ) offset \(((struct\ task\_struct\ *)0)\to links)offset(((structtask_struct∗)0)→links)这种计算方式实在是太妙了。首先人为设定起点将 0 强制转换为结构体指针相当于在内存地址 0 的位置“虚拟”出一个结构体。算位置访问成员 links 并取地址编译器会根据内存对齐规则算出它相对于起点即地址 0的距离。空位即偏移因为起点是 0所以得到的成员地址在数值上就精准等于它在结构体里的偏移量。C自带一个宏可以直接获取这个偏移量上面的讲解就是它的底层。首先包含头文件#include stddef.h第一个参数填结构体类型第二个填成员名。size_t offsetoffsetof(structtask_struct,links);3.2.2彻底理清“流动”的本质多链表动态解绑与重组这一段内容会再一次颠覆你的认知。在探讨进程如何在各种队列中“流动”之前我们需要先纠正一个极易混淆的误区⚠️重要纠错设备树≠ \neq等待队列我上文把“设备树”和“等待队列”混为一谈认为进程阻塞是挂在设备树上。这是极其不准确的设备树和等待队列没有半毛钱关系。设备树 (Device Tree)是系统启动时内核用来清点、初始化硬件的静态“点名册”不参与运行时进程的调度。等待队列 (Wait Queue)是驱动程序内部维护的运行时动态链表专门用来组织正在等待该设备的进程。3.2.2.1物理上它们“住在一起”在物理内存中一个进程有且仅有一个task_struct进程控制块 PCB实例。这个结构体非常庞大包含了一个进程的所有核心信息PID、状态、优先级等。它就像一个巨大的“多功能插线板”身上长满了各种不同的接口 ——这些接口就是内嵌在其中的struct list_head成员变量。3.2.2.2逻辑上它们属于“完全不同的绳子”虽然所有的插口都长在同一个 PCB 上但每个插口连接的都是不同的、相互独立的、没有交集的独立链表。这就是著名的“用绳子穿过实体”的设计全局链表Tasks List像一根红色的绳子横向穿过每个 PCB 的tasks插口。只要进程存活这条线就永远不解绑内核通过它来遍历系统中的所有进程。运行队列Runqueue像一根橙色的绳子只穿过那些状态为“就绪Ready”或“运行Running”的 PCB 的run_list插口。调度器Scheduler只在这条线上挑选进程去 CPU 上执行。某一条等待队列Wait Queue设备千千万等待队列的蓝线也有千千万。每个硬件设备网卡、键盘、磁盘等都有自己专属的一条等待队列线。3.2.3.3“流动”是如何发生的当一个进程从“运行态”变成“阻塞态”例如等待读取磁盘文件时内核绝对不会去搬动或复制这个巨大的 PCB它在幕后只干了两件事解绑断开旧线调用list_del把该 PCB 负责“运行队列”的run_list钩子从橙线上取下来。重连挂上新线调用list_add把该 PCB 负责“等待队列”的wait_list钩子挂到该磁盘设备特有的那条蓝色等待队列线上。3.2.2.4核心总结实体唯一内存中只有task_struct一个实体静静地呆着。状态改变 关系解绑与重组进程所谓的“状态流动”物理本质上只是不同颜色的绳子链表指针在 PCB 的不同插口上进行解绑和重新勾连的过程。高效率的秘密这种设计让进程状态切换变成了极其高效的指针操作O ( 1 ) O(1)O(1)复杂度不需要任何内存拷贝完美体现了 Linux 内核“扁平化且高效”的管理哲学。四、进程状态的查看4.1回顾Linux的进程状态类型把上面你看不懂的那张表搬过来现在你至少能读懂一部分了接下来我们来查看一下进程的状态/* * The task state array is a strange bitmap of reasons to sleep. * Thus running is zero, and you can test for combinations of * others with simple bit tests. */staticconstchar*consttask_state_array[]{R (running),/*0 */S (sleeping),/*1 */D (disk sleep),/*2 */T (stopped),/*4 */t (tracing stop),/*8 */X (dead),/*16 */Z (zombie),/*32 */};进程状态的本质就是一个在PCB中的整型是一个状态数组的下标。4.2运行R与睡眠S状态Linux的Sleep就先当于操作系统的阻塞状态#includeiostream#includeunistd.hintmain(){std::coutstd::unitbuf;intcount0;pid_t pidgetpid();while(true){std::cout我是后台进程, PID: pid, 循环次数: countstd::endl;sleep(1);}return0;}为什么我们查到的进程状态都是S?因为我们的进程是一个循环打印假设执行一次是1毫秒在这毫秒中99%的时间是在等待显示屏就绪1%的时间是拿来打印于是运气不好我们查不出来。#includeiostream#includeunistd.hintmain(){// 打印当前的 PID方便你后续去查状态或杀进程std::cout进程已启动, PID: getpid()请在另一个终端观察其状态...std::endl;// 纯 CPU 计算的死循环没有任何 I/O 打印也没有 sleepwhile(true){}return0;}不让他IO查出来全部都是R如果进程在前台那么状态前面就有一个号否则没有。加上表示当前进程在后台启动[whbbite-alicloud lesson13]$ ./myprocess4.3停止T与追踪停止状态tt表示进程处于“正在被追踪而停止”的状态。虽然它也属于停止状态但它与大写 T 有细微的语义区别大写 T (Stopped)通常是用户主动发送信号如 CtrlZ让进程停下的。小写 t (Tracing stop)专门用于 Debugger调试器环境。当进程被系统追踪比如你在用 gdb 调试时进程在等待调试器发送下一个指令c/s期间状态会显示为小写的 t。关于19号信号稍微补充一下信号还没有学在 Linux 信号机制中19号信号是SIGSTOP。SIGSTOP的唯一作用就是强制停止挂起一个进程。当进程接收到这个信号时它的状态会立即转变为T(Stopped)。你按下ctrl Z也是传递这个信号给进程。一种很有趣的场景含scanf等阻塞式输入函数的进程被放到后台运行。行为分析后台进程无法直接从终端读取用户输入。当进程尝试执行scanf等终端输入系统调用时内核会向该进程发送SIGTTIN信号强制将其暂停Stopped, T。解决办法用户需要通过fg命令将该进程调回前台才能正常输入并继续执行。4.4深度睡眠D4.4.1对比一般睡眠状态浅睡眠S比如有一个scanf在等待阻塞。然后我们直接按ctrlc可以直接kill它。或者执行指令kill -9 PID杀死这个是信号的知识后面会讲但是深度睡眠D状态怎么都不会杀死。如何杀掉D进程1.等他自己醒来。2.物理方法重启计算机/断电4.4.2深度睡眠的意义场景一个进程正在向磁盘写入数据但是磁盘写入数据的速度超级慢相对于进程而言于是进程就要去等待磁盘进入S状态。等待过程中可能发生一种非常极端的内存不足情况这个时候OS就要开始杀没有用的进程。这个时候可能会误杀这个正在“摆烂”的进程。于是这个时候磁盘还没有读完数据但是进程已经被干掉了磁盘拿着数据不知道该怎么办于是就只能把数据丢弃了。这个时候用户还不知道于是就丢失了数据。如果这个数据是医院里几千个病人的病历或者是银行的转账信息这是非常危险的。为了防止操作系统发生上述情况。于是一种新的状态被设计出来。D状态不可中断。4.4.3测试方法构建一个块级 IO通过以下命令模拟高强度的磁盘写入操作ddif/dev/zeroof~/test.txtbs4096count100000dd: 磁盘拷贝/转换命令。if/dev/zero: 输入文件数据来源源源不断地产生零字节。of~/test.txt: 输出文件拷贝到的目标文件路径。bs4096: 每次拷贝的数据块大小Block Size此处为 4096 字节4KB。count100000: 一共拷贝的数据块数量这里一共拷贝 100000 次。好的本期内容就到这里如果对你有帮助还不要忘记点赞三联支持。我是此方我们下期再见。bye!

相关文章:

Re: Linux系统篇(十八)进程篇·三:深度硬核!全面起底 Linux 进程状态变化与内核链表动态解绑

◆ 博主名称: 晓此方-CSDN博客 大家好,欢迎来到晓此方的博客。 ⭐️Linux系列个人专栏: 【主题曲】Linux ⭐️此方的GitHub: github_此方 ⭐️Re系列专栏:我们思考 (Rethink) 我们重建 (Rebuild) 我们记录 (Record…...

意识的“调谐客观还原”理论

“调谐客观还原”理论,通常称为 Orch-OR,是诺贝尔物理学奖得主罗杰彭罗斯与麻醉学家斯图尔特哈梅罗夫于20世纪90年代初提出的一种极具争议的意识假说。该理论的核心观点是:意识并非产生于神经元之间的经典电化学连接,而是源于神经…...

基于 Python 有限元法的光子微腔仿真:从理论到代码实现

引言:光子微腔与有限元法的结合实例# 安装基础依赖 pip install numpy matplotlib scipy# 安装GMSH网格生成器 pip install gmsh# 安装FEMWELL光子学有限元库 pip install femwell# 安装FEniCSx(FEMWELL的底层依赖) # 对于Ubuntu/Debian系统 …...

5分钟学会AnyFlip电子书一键下载:免费PDF转换终极指南

5分钟学会AnyFlip电子书一键下载:免费PDF转换终极指南 【免费下载链接】anyflip-downloader Download anyflip books as PDF 项目地址: https://gitcode.com/gh_mirrors/an/anyflip-downloader 你是否曾经在AnyFlip上找到一本精彩的电子书,想要永…...

多语言交易所源码/币币交易+期权交易+永续合约+Defi借贷+新币申购+矿机理财/前端uniapp纯源码+后端php

简介: 多语言交易所源码/币币交易期权交易永续合约Defi借贷新币申购矿机理财/前端uniapp纯源码后端php 语言:7种,看图 前端是uniapp纯源码,只有手机端,后端是php框架,清理了后门的,是最开始蓝…...

86、【Agent】【OpenCode】bash 工具提示词(完结)

【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除 背景 上篇 blog 【Agent】【OpenCode】bash 工…...

根据等价类划分法,**有效等价类**是指符合系统规格说明、应被系统正常接受的输入范围

根据等价类划分法,有效等价类是指符合系统规格说明、应被系统正常接受的输入范围。 题目中密码长度要求为 6–12位(含端点),即最小长度为6,最大长度为12,且为整数位数。 因此,关于密码长度的有效…...

【软考高级架构】案例题考前突击——构建可观测与弹性服务架构的实践设计

案例分析题:构建可观测与弹性服务架构的实践设计 案例背景 某金融科技公司搭建了基于Spring Cloud 的微服务系统,用于支撑其多租户 SaaS 金融平台,核心功能包括用户管理、交易撮合、支付结算、风控审计等模块。由于业务快速扩张、团队并行开发,系统逐渐暴露出如下痛点: …...

Java全栈工程师面试实录:从基础到微服务的深度技术对话

Java全栈工程师面试实录:从基础到微服务的深度技术对话 面试官与程序员的对话 面试官(李哥): 你好,欢迎来参加我们公司的面试。我是李哥,负责技术面试。先简单介绍一下你自己吧。 程序员(张浩&a…...

【YOLOv8多模态融合改进】| IEEE2025 分层特征融合模块HFF 自适应权重 + 三重注意力,强化弱小目标细节保留

一、本文介绍 本文记录的是利用分层特征融合模块HFF改进YOLOv8的可见光-红外双模态目标检测。 HFF(Hierarchical Feature Fusion)通过浅层-深层特征逐元素融合、空间-通道-像素三重注意力建模与自适应加权分配结合,实现多模态来源下不同语义层级特征的自适应重要性学习与精…...

AI+HR 全生命周期智能管理实战指南:从概念到落地,解锁组织效能新增长!​

在企业数字化转型的浪潮中,人力资源管理正经历着前所未有的变革。据行业数据,61% 的 HR 领导者已进入 GenAI 实施进阶阶段,82% 的企业计划在 12 个月内部署 AI 智能体,而 AI 驱动的企业人均效能已实现3.2 倍提升。当传统 HR 深陷事…...

2026年AI面试准确率TOP榜:92%一致性背后,谁在定义行业新标准?

当年ChatGPT的横空出世,让全世界第一次见识到通用大模型的对话能力;DeepSeek 的爆发,则将AI的火种真正播撒到中国各行各业的毛细血管中,而在人力资源行业作为数字化转型的前沿阵地,首当其冲迎来了AI的全面渗透 &#x…...

如何优化鸿蒙 App 的启动速度?

子玥酱 (掘金 / 知乎 / CSDN / 简书 同名) 大家好,我是 子玥酱,一名长期深耕在一线的前端程序媛 👩‍💻。曾就职于多家知名互联网大厂,目前在某国企负责前端软件研发相关工作,主要聚…...

梳理尼日利亚外贸典型骗局分享高效避雷方法

与尼日利亚客户交易须防范D/P条款陷阱,信用证务必经第三国银行保兑,警惕提单信息泄露,掌握风控要点方能安全拓展西非市场。拒绝D/P托收条款切勿接受D/P付款方式。尼日利亚部分银行可能与客户勾结,在买方未付货款的情况下擅自放行提…...

ncmdumpGUI:免费解锁网易云音乐加密文件,3分钟实现跨设备播放自由

ncmdumpGUI:免费解锁网易云音乐加密文件,3分钟实现跨设备播放自由 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾经遇到过这样…...

奇门对接顺丰电子面单:从200行“祖传代码”到优雅重构的经验分享

一、背景:那年写下的“能跑就行” 在我们的电商WMS系统中,发货环节需要通过菜鸟奇门电子面单接口向顺丰等快递公司申请运单号。这段核心代码写于多年前,当时的业务需求比较简单:只支持淘宝/天猫订单,快递也只有顺丰。…...

Java 程序员第 24 阶段:多 Agent 高阶实战,复杂业务场景完整落地实现

在多 Agent 基础篇中,我们探讨了角色协同、任务拆分的基本模式。本文进一步深入,聚焦高阶架构设计、跨服务协作与复杂场景完整落地,帮助读者构建生产级别的多 Agent 系统。一、高阶架构:从简单协同到生产级系统1.1 三层架构模型成…...

乒乓球教程

【课程教程资料】乒乓球入门必看,全方位发球技巧教学 文件大小: 3.9GB内容特色: 3.9GB高清发球拆解,握拍站位旋转全囊括适用人群: 零基础球友、校园社团、陪练家长核心价值: 20课时速成稳定发球,直接提升实战得分率下载链接: https://pan.qu…...

Esp32Robot入门04-服务端架构与本地Docker拉起(实战进阶:手把手教你用Docker部署小智助手服务端)

Esp32Robot入门04-服务端架构与本地Docker拉起(实战进阶:手把手教你用Docker部署小智助手服务端) 📌 文章简介: 在AI智能硬件开发中,ESP32-S3因高性价比备受青睐,但面对千亿参数的本地大模型与高…...

如何快速掌握DeepL翻译插件:浏览器跨语言阅读的终极解决方案

如何快速掌握DeepL翻译插件:浏览器跨语言阅读的终极解决方案 【免费下载链接】deepl-chrome-extension A DeepL Translator Chrome extension 项目地址: https://gitcode.com/gh_mirrors/de/deepl-chrome-extension DeepL翻译插件是一款基于DeepL API的高质量…...

抖音批量下载神器:5分钟掌握高效内容采集的终极指南

抖音批量下载神器:5分钟掌握高效内容采集的终极指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support…...

算法实例分析:使数组相等的最小开销

使数组相等的最小开销通过题意分析可知要让所有值相等,必然不需要超出数据的最大最小值,因此左右边界可以预先缩小范围。然后根据我们上面的分析不断缩小搜索边界范围。关于函数的计算,只要统计所有数据与的差值再乘上权重即可。最后注意&…...

国内大学生必备的AI论文写作工具有哪些?

国内高校学生常用的 AI 论文写作工具,以本土化全流程工具为主,结合通用大模型与专业辅助功能,覆盖选题、框架搭建、初稿撰写、查重降重、格式调整等关键环节,以下是主流工具详解与对比:一、本土全流程论文 AI 工具&…...

太顶了!输入主题,这几款AI论文软件自动生成毕业论文初稿!

毕业季论文焦虑?还在为选题、查资料、写大纲、润色修改熬夜到凌晨?别担心,现在只需输入主题,几款AI论文工具就能自动生成图文并茂的毕业论文初稿,从开题到定稿全流程搞定!千笔AI、ThouPen、豆包、DeepSeek、…...

Android NDK/JNI开发深度指南:从基础到实战

引言 在移动应用开发领域,Android平台以其开放性和灵活性著称。然而,当应用需要处理高性能计算、图像处理、游戏引擎或重用现有C/C++库时,纯Java实现可能面临性能瓶颈。这时,Native Development Kit(NDK)和Java Native Interface(JNI)成为关键工具。NDK允许开发者使用…...

揭秘Midjourney V6拟物化失控真相:为什么87%的设计师调不出真实皮革/金属/织物质感?

更多请点击: https://intelliparadigm.com 第一章:Midjourney V6拟物化失控现象的底层本质 Midjourney V6 引入的拟物化(PhotorealismMaterial Fidelity)增强机制,并非单纯提升纹理细节,而是通过隐式材质…...

文档分析准确率从61%跃升至98.7%的关键转折点(附2024Q2最新Claude-3.5 Sonnet文档理解基准测试对比表)

更多请点击: https://kaifayun.com 第一章:文档分析准确率跃升至98.7%的里程碑意义 当文档智能系统在真实业务场景中将结构化识别准确率稳定提升至98.7%,这不仅是一个数字的突破,更是文档理解能力从“可用”迈向“可信”的关键分…...

深入解析Android进程与线程间通信机制:原理、实践与优化

引言 在Android开发中,进程与线程间通信(IPC)是构建高性能、高稳定性应用的核心技术。无论是多进程协作(如系统服务、插件化框架)还是多线程并发(如UI线程与后台任务),高效的通信机制直接决定了应用的流畅性与资源利用率。本文将围绕Binder机制、Handler机制、共享内存…...

26-cv-3948 NASCAR 纳斯卡赛车北美赛车巨头NASCAR商标维权!年认证超1500场赛事,全球布局品牌产品与授权营销。

案号:26-cv-3948原告品牌:NASCAR 纳斯卡赛车品牌方:National Association for Stock Car Auto Racing, LLC起诉地:美国纽约州南区代理律所:Whitewood Law PLLC起诉时间:2026年05月12日起诉类型:…...

MySQL中redo log 和 bin log的本质区别,别再搞混了!

很多初学者容易把 redo log 和 binlog 搞混,它们都是 MySQL 的日志,但有着本质的区别:对比维度redo logbin log所属层级InnoDB 存储引擎层MySQL Server 层日志类型物理日志,记录数据页的修改逻辑日志,记录SQL语句或行变…...