操作系统线程与调度小测复盘:核心概念、算法计算与易错点全解析
考操作系统的人大概都有这种感觉线程和调度这块上课听的时候觉得逻辑都懂一到做题或者面试各种细节就开始打架。前阵子我们操作系统课搞了一次课堂小测主题正好是“线程与调度”考完和几个同学对答案发现错的点其实非常集中而且特别有代表性。这篇文章就是那次小测的完整复盘我不光会把题目涉及的知识点重新梳理一遍还会把我自己在考场上犹豫过的、踩进去的坑贴出来再附上一些考试之外真正写代码时也用得上的理解。适合正在学操作系统、准备期末或者复习面试基础的人看也适合想检验一下自己线程调度概念是不是真的扎实的同学。1. 这次小测到底在考什么先说说这次小测的整体观感。整个小测的时间不长题量也不算特别大但覆盖面非常精准基本就是把“线程”和“调度”这两个章节里最容易混淆、最核心的概念全部拎出来考了一遍。题型有选择题、判断题、计算题和简答题选择题和判断题主要考定义和边界计算题则是对调度算法的实操演练。我在考完之后翻了翻课程大纲发现老师出题的思路其实很清晰——他希望我们不只是记住“有哪些调度算法”而是真的理解每个算法在什么场景下适用、它的优劣分别是什么、以及计算周转时间和等待时间的时候能不能算对。从这个角度说这次小测更像是一次“概念体检”很多我以为自己会的东西真到了限时作答的情况下完全不是那么回事。小测的重点模块大致可以分成四块线程基础线程概念、线程与进程的区别、线程的实现模型。同步与并发线程安全问题、临界区、互斥与同步的基本思路。调度算法常见调度算法FCFS、SJF、RR、优先级调度、多级反馈队列的执行逻辑。调度指标与计算周转时间、等待时间、响应时间的计算。我在复习的时候发现一个规律凡是能拿计算器或者纸笔推演出来的题大家普遍做得不错凡是考概念边界的题错的就特别多。这个现象值得好好聊一聊因为概念边界的模糊不是靠刷题能解决的必须得把底层逻辑理顺。2. 线程核心概念不只是“轻量级进程”这么简单2.1 从进程到线程到底拆掉了什么线程这块最容易出现的误区就是把线程理解成“更小的进程”。这种说法不能算全错但它掩盖了一个非常关键的事实线程并不是简单地把进程做小而是把进程原本拥有的资源与执行状态分离了。进程在操作系统里是一个完整的资源拥有单位它有自己独立的地址空间、打开的文件、信号处理器、当前目录等。而线程则只保留下最少的执行现场也就是程序计数器、寄存器集合和栈空间。多个线程共享同一个进程的地址空间、文件描述符、全局变量等资源。换句话说线程之间并不存在“完整的隔离墙”。这次小测里有一道判断题问的就是这个线程是否拥有独立的地址空间不少同学选了“是”这其实是对线程私有属性的误判。线程确实有几样东西是私有的——栈、寄存器状态、程序计数器、线程局部存储TLS但地址空间绝对是共享的。如果每个线程都持有独立地址空间那么线程间通信就退化成进程间通信了也就失去了线程存在的意义。理解这一点对后续的并发编程特别重要。既然线程共享地址空间那么一个线程写全局变量另一个线程读取这个变量时就会发生竞争条件。这也是为什么“共享”这两个字既是线程高效的原因也是线程一切麻烦的根源。做题的时候遇到“线程间通信为什么比进程间通信快”之类的题答案可以说基本都指向这个共享特性。2.2 线程三种实现模型别让“内核级”三个字吓到线程的实现模型是另一个高频考点也是我在小测里犹豫最久的地方。市面上不少教材直接把线程分成用户级线程ULT和内核级线程KLT外加一个组合模型。这里有个经常混淆的地方用户级线程在用户空间由线程库管理内核完全不知道它的存在而内核级线程则由操作系统内核直接管理线程切换需要陷入内核。这三种模型我整理了一张对比表复习的时候贴着墙看非常管用实现模型管理主体线程切换开销多核利用优点缺点用户级线程用户空间的线程库低不需要陷入内核差内核只调度进程无法把不同线程分配到不同核切换快、实现灵活一个线程阻塞会把整个进程阻塞内核级线程操作系统内核较高需要陷入内核态好内核可以把线程调度到不同CPU核心多核利用率高、线程阻塞不拖累同进程其他线程切换开销大、用户态内核态切换频繁组合模型用户级与内核级协同中等较好兼顾两者优势实现复杂度高这道题如果出判断题“用户级线程同样可以被多个CPU核心并行执行”答案一定是否定的。原因在于用户级线程对于内核来说仍然只是“一个进程里的执行流”内核的调度单位是进程而不是线程所以没法把一个进程内的多个用户级线程分摊到多个核上。我在小测里差点在这里翻车因为脑子里想着“线程都能并行”忽略了实现模型上的限制。2.3 上下文切换的隐藏成本上下文切换这部分的考点更多和“性能损耗”相关。线程切换和进程切换不一样进程切换必然涉及地址空间切换这意味着页表、TLB快表可能全部失效而同一进程内的线程切换只需要保存和恢复寄存器、程序计数器、栈指针等少量状态不需要切地址空间所以开销相对小很多。我在整理错题的时候发现很多人会把“线程切换一定比进程切换代价小”当成万能真理。严格来说同一进程内的用户线程切换代价确实小于进程切换但如果是不同进程之间的内核级线程切换实际上和进程切换没太大区别一样要面临Cache和TLB失效的问题。判断题里给一个笼统的“线程切换开销总是比进程切换小”直接判错即可。3. 调度算法背下来容易用明白难3.1 调度算法的目标其实在互相打架调度算法的设计本质上是在多个目标之间做平衡。这里面最典型的几组矛盾包括吞吐量与响应时间最大化系统吞吐量往往意味着让长作业一直占用CPU但这会让交互型短作业的响应时间变得很难看。CPU利用率与公平性让CPU保持高利用率的调度策略在极端情况下可能让某些低优先级作业长期得不到调度造成饥饿。周转时间与等待时间最短作业优先能优化平均周转时间但对长作业非常不友好可能出现“长作业被反复插队”的情况。小测里出了一道简答题让大家说说“为什么没有一个所谓的完美调度算法”。其实本质上就是在考这个目标冲突。每个算法都有自己的度量基准你拿着“平均等待时间最优”的尺子去量一个抢占式算法能得到一定的优势但同时可能牺牲了响应时间或公平性。理解了这些冲突后面看Linux的CFS调度器、Windows的优先级调度就不会觉得它们设计得很随意了。3.2 四个必考的调度算法3.2.1 先来先服务FCFSFCFS是最朴素的调度算法按照进程到达就绪队列的顺序进行调度非抢占。它有一个非常出名的特点平均等待时间可能非常长尤其是当一个长作业排在短作业前面时。我在小测前复习的时候自己拿一组数据算过三个任务A、B、C执行时间分别是10、2、3它们都在0时刻到达按照A、B、C的顺序调度。那么A的周转时间是10等待时间是0。B的周转时间是12等待时间是10。C的周转时间是15等待时间是12。平均等待时间是(01012)/3 7.33。如果按照短作业优先也就是B、C、A的顺序调度情况会大不一样B的周转时间是2等待时间是0。C的周转时间是5等待时间是2。A的周转时间是15等待时间是5。平均等待时间变成了(025)/3 2.33。就这一组数据直接说明了为什么FCFS对短作业不友好的特点常常被拿来做线性分析。FCFS的好处在于简单、公平感强、无饥饿它的“不公平”主要体现在长任务拖后腿。计算题里只要给出到达时间老老实实把每个任务的完成时间和等待时间列成表格基本就不会错。3.2.2 最短作业优先SJF与最短剩余时间优先SRTFSJF是非抢占式的每次从就绪队列中选择执行时间最小的作业运行而SRTF是SJF的抢占式版本如果一个新进程到达且它的剩余执行时间比当前进程的剩余时间更短就发生抢占。做题的时候特别容易把这两个搞混。最稳妥的理解方式是SJF一旦开始执行就不会中途被换下而SRTF每时每刻都在重新评估“谁剩下的时间最少”。这地方有个经典的计算陷阱假设P1在0时刻到达执行时间8P2在1时刻到达执行时间4P3在2时刻到达执行时间9。用SRTFP1先跑但当P2在1时刻到达时P2剩余4P1还剩下7所以P2抢占。跑到2时刻P3到达P3剩余9当前P2剩余3不抢占P2继续跑完释放CPU后选择P1和P3中剩余时间较短的也就是P1剩下7P3是9等P1跑完再跑P3。这种边界上的计算不画甘特图很容易漏掉某个抢占点。所以我的建议是遇到调度计算题先画甘特图再算指标。甘特图不用画得多精细只要把抢占发生的时间点标出来后面算周转时间、等待时间就水到渠成。3.2.3 时间片轮转RRRR是响应时间友好的代表每个进程最多执行一个时间片q时间片耗尽则回到队列尾部。判断题和简答题里喜欢考“q的大小对系统性能的影响”。这个点很微妙q太大RR退化成FCFS交互性变差。q太小大量的时间都耗费在上下文切换上CPU有效利用率下降。时间片的取值其实是在“响应时间”和“切换开销”之间做折中。经验上一个合理的q应该大于一次上下文切换所需的时间几个数量级比如10ms到100ms这个区间但具体取值还要结合系统负载和进程的典型CPU段长度来看。RR的另一个容易被忽视的考点是一个进程的等待时间随着进程数量线性增加。N个进程、每个进程时间片q那么一个进程最长的等待时间是(N-1)q。这个公式记住之后选择题里算“最大响应时间”基本是送分。3.2.4 多级反馈队列MLFQMLFQ可以说是一众简单算法的集大成者它用多个队列每个队列有不同的优先级和时间片长度而且允许进程在队列之间移动。它的核心设计原则是用过去的执行经验预测未来——一个进程如果频繁让出CPU说明它是交互型的保持高优先级一个进程如果一直抢占CPU直到时间片耗尽说明它是CPU密集型的逐步降级到低优先级队列。MLFQ有四个经典参数需要关注队列数量、各队列的时间片大小、提升优先级的时间条件、以及降级的规则。小测里有道题给了一个简化版的MLFQ配置让判断进程的调度顺序。我当时在“是否会降级”这个点上犹豫了一下其实是没区分开两种情况时间片内主动让出CPU vs 时间片耗尽被强制切换。主动让出不应该直接降级被强制切换才说明它是计算密集型才需要降级。还有一点值得提醒MLFQ最怕的是“饥饿”即低优先级队列里的长作业永远得不到CPU。为了解决这个问题现代操作系统通常采用周期性的优先级提升比如Windows和Linux都有类似的反饥饿机制。做题的时候如果题目里给了提升规则一定要把它用上如果题目里没有给一般都默认不考虑饥饿的问题。4. 经典计算题实录一步步算给你看计算题是小测里分值最大的部分也是最能暴露问题的地方。当时给的是一组混合调度的题四个进程到达时间和执行时间各不相同要求分别用FCFS、SJF和RR时间片为1来求平均周转时间并比较结果。我尽量把当时纸上的计算过程还原一遍顺便标出哪些步容易错。题目假设是这样四个进程进程到达时间执行时间P106P213P321P4344.1 FCFS计算过程FCFS严格按到达顺序调度所以调度顺序是P1、P2、P3、P4。P1在0时刻到达0时刻开始运行6时刻完成周转时间6。P2在1时刻到达6时刻才开始运行9时刻完成周转时间9-18。P3在2时刻到达9时刻开始运行10时刻完成周转时间10-28。P4在3时刻到达10时刻开始运行14时刻完成周转时间14-311。平均周转时间 (68811)/4 33/4 8.25。这个题只要列个表格就能全队。最容易错的点是周转时间要用“完成时间减去到达时间”而不是“运行结束就完了”因为每个进程的“开始运行时间”和“完成时间”之间可能隔了很多其他进程。4.2 SJF计算过程SJF非抢占在每次调度时刻从当前已到达且未运行的进程里选执行时间最短的。0时刻只有P1到达所以P1先跑运行到6。6时刻所有进程都已到达未运行的是P2(3)、P3(1)、P4(4)选最短的P36时刻开始7完成。7时刻未运行的是P2(3)、P4(4)选P27开始10完成。最后P410开始14完成。周转时间P16-06P210-19P37-25P414-311平均周转时间 (69511)/4 31/4 7.75。这里有个隐藏的细节SJF的调度决策点不仅仅在“进程完成的时刻”还在“新进程到达的时刻”重新判断但因为它非抢占所以在运行过程中不会因为来了一个更短的任务而强行打断当前任务。这题的决策点在0、6两个时刻中间的1、2、3时刻虽然有新进程到达但P1正在运行且未被允许抢占所以不改变调度顺序。4.3 RR时间片为1的计算过程RR时间片为1进程按到达顺序排队每个进程运行1个时间单位后回到队尾。0时刻P1进入队列运行[0,1)剩余5。1时刻P2到达队列为P2, P1运行P2 [1,2)剩余2。2时刻P3到达队列为P1, P2, P3运行P1 [2,3)剩余4。3时刻P4到达队列为P2, P3, P1, P4运行P2 [3,4)剩余1。按这个方式一直轮转直到所有任务完成。实际做这个题的时候我建议画一个时间线表格逐时间片标注每个进程的运行区间和剩余时间时间区间运行进程完成情况0-1P1剩余51-2P2剩余22-3P1剩余43-4P2剩余14-5P3完成5-6P1剩余36-7P4剩余37-8P2完成8-9P1剩余29-10P4剩余210-11P1剩余111-12P4剩余112-13P1完成13-14P4完成从这个表看P3在第一次运行就完成了其实在3时刻到达的P4已经在队列末尾等待。最后完成时刻是14。各进程周转时间是P113-013P28-17P35-23P414-311平均周转时间 (137311)/4 34/4 8.5。对比三组结果就能发现SJF在这个数据集上平均周转时间最短RR因为频繁切换、且对短任务没有优先调度平均周转时间反而比SJF差它的优势是在“响应时间”而不是“周转时间”上。所以说“RR一定比FCFS好”这种印象流在做题和实际系统设计上都站不住脚。5. 那些年我们在小测里踩过的坑5.1 误把“非抢占”当成“不会打断调度”选择题里有一道出现频率特别高的干扰项“SJF一旦开始执行就一定会执行到完。”严格来说这是非抢占SJF的语义但在SRTF抢占式SJF里新进程如果剩余时间更短是可以打断当前进程的。做题的时候一定要看清楚题干里写的是SJF还是SRTF如果是SRTF就必须在每个“新进程到达时刻”重新评估一次。我考场上就有一道题写了SJF我默认成SRTF算出来的结果有一个时间点的偏差白白丢分。5.2 搞混“用户态线程切换”和“内核态线程切换”判断题里有一道问“用户态线程切换不需要操作系统介入所以不存在任何开销”。这句话前半句是对的但后半句是完全错误的。用户态线程切换虽然不需要陷入内核但切换本身仍有代价比如栈切换、寄存器上下文保存恢复而且用户级线程由于内核无法感知一旦某个线程执行了一个阻塞式系统调用整个进程内的其他线程都会被阻塞。这个区别后来我在看协程库比如Go的Goroutine调度时体会得更深了——用户态调度器把切换开销压得很低但代价就是调度器需要自行处理阻塞点。5.3 忽略了调度算法的“公平性”维度小测简答题里有一问是“为什么优先级调度可能产生饥饿怎么解决”。很多同学写了一大堆但还是漏掉了最常用的两个手段老化aging和优先级提升。老化是一种非常直观的方案——随着进程在就绪队列里等待的时间增长它的优先级逐渐提高最终一定会被调度到。引入老化之后低优先级的长任务不会永远被饿死。如果将来面试被问到“怎么设计一个公平的调度器”这个点一定要能接上。5.4 周转时间 vs 响应时间一对被混用的概念很多时候大家把“响应时间”和“周转时间”混着说。这两个指标在交互型系统里的意义完全不同响应时间指的是从请求提交到开始产生响应之间的间隔它反映的是“交互是否流畅”周转时间则是从任务提交到任务完成的总时长它反映的是“任务到底花了多久才全部做完”。RR算法牺牲了一定的平均周转时间换来的是所有任务都能很快得到首次响应。理解这对关系对我们后来优化接口性能也有启发一个慢接口如果只是“排队等待时间过长”问题不一定在单次执行耗时而可能在调度策略或资源竞争上。5.5 小测易错点速查易错考点正确理解典型错误线程私有资源栈、寄存器、PC、TLS认为线程有独立地址空间用户级线程多核利用内核感知不到用户级线程无法分散到多核误以为所有线程都能并行SJF与SRTF的抢占SRTF新任务剩余时间更短时可抢占把两者混为一谈RR时间片取值过大退化为FCFS过小切换开销大认为时间片越小越好MLFQ升降级规则主动让出CPU不降级时间片耗尽才降级把两种情况都当作降级上下文切换范围同进程线程切换相对轻量忽略内核级切换涉及态的转换开销公平性与老化老化可以防止低优先级饥饿忘记优先级提升机制6. 手写一个调度算法模拟器来验证理解6.1 为什么要写模拟器小测之后我花了一个晚上把上课讲的几种调度算法用Python写了一遍。很多人觉得写调度模拟器很麻烦其实并不复杂而且写完后你会发现很多之前“感觉是不是这样”的判断现在有了铁证。写模拟器的核心思路是维护一个就绪队列和当前CPU上运行的进程模拟每个“事件”的发生——进程到达、进程完成、时间片耗尽。事件驱动的方式比逐个时间单位扫描要快得多也更接近真实操作系统的调度循环逻辑。6.2 一个简化版的FCFS模拟class Process: def __init__(self, pid, arrive_time, burst_time): self.pid pid self.arrive_time arrive_time self.burst_time burst_time self.remain_time burst_time self.completion_time None def wait_time(self): return self.completion_time - self.arrive_time - self.burst_time def fcfs_schedule(processes): processes.sort(keylambda p: p.arrive_time) current_time 0 result [] for p in processes: if current_time p.arrive_time: current_time p.arrive_time current_time p.burst_time p.completion_time current_time result.append(p) return result procs [Process(1, 0, 6), Process(2, 1, 3), Process(3, 2, 1), Process(4, 3, 4)] finished fcfs_schedule(procs) for p in finished: print(fP{p.pid}: 完成时间{p.completion_time}, 周转时间{p.completion_time - p.arrive_time}, f等待时间{p.wait_time()})这个方法的好处是逻辑清晰你甚至可以根据这个框架扩展出SJF和RR的版本。SJF只需要在“选择下一个进程”时按剩余时间排序RR最简单粗暴的做法就是模拟时间片队列用collections.deque来维护就绪队列每个时间片弹出队首进程运行一个单位后如果没完成就重新入队。我自己在扩展模拟器的过程中发现尽快写出一个能跑的结果远比对着课本上的算法描述纠结更有效。而且后续如果要复习Linux CFS相关的内容这个模拟器还能做一个直观的比较基础。6.3 用模拟器验证你的计算考试的时候不能写代码但复习的时候可以用模拟器来对答案。比如上面那个RR时间片1的例子用模拟器跑出来P1完成时间13、P2完成时间8、P3完成时间5、P4完成时间14和手工计算完全一致。这样做的好处是如果手算结果和模拟结果不一样你至少能知道是手算的哪一步出了问题而不是反复怀疑算法理解错了。这个方法特别适合考前冲刺阶段用来刷计算题。7. 从课堂小测到真实系统这些知识在操作系统中怎么落地7.1 经典系统里的调度器参考小测的知识点看似只停留在考试层面实际上它们几乎是现代操作系统的直接映射。Linux的CFS完全公平调度器不再使用传统的时间片和优先级队列而是用虚拟运行时间vruntime来保证每个进程获得相对公平的CPU时间份额。它并不像课本里那种简单的MLFQ等级划分而是一种动态平衡的思路。说实话如果你对MLFQ的“降级提升”逻辑熟练的话理解CFS的虚拟时钟会轻松很多因为本质都是“用历史经验预测未来”。Windows调度器则是典型的优先级抢占模型配合多级队列。它在处理饥饿问题上明确提供了“优先级提升”机制——当一个低优先级进程等待太久时系统会临时提升它的优先级。这就是一种比课本更具体的“老化”实现。这些例子告诉我们调度算法在真实系统里往往不是单一算法的教条应用而是多种思想的组合。7.2 线程模型与并发编程的关联线程模型这块考试考的是“用户级还是内核级”实际写代码时我们更关心的是并发框架选用什么线程模型。比如Redis是单线程事件循环Nginx是类似的多进程事件驱动而Java的线程池则是典型的内核级线程模型。它们的性能差异并不在于模型本身的绝对好坏而在于与业务场景的匹配度。读多写少的服务端程序用事件驱动单线程往往效率很高因为省去了大量线程切换和锁竞争的开销而CPU密集型任务则非常适合内核线程并行利用多核。从考试角度讲理解线程模型的关键是抓住一条主线谁在切换谁来决定切换切换到什么程度。内核级线程由内核调度用户级线程由库代码调度组合模型则是在两者之间搭了一座桥。这条主线抓住了后面所有的选择题基本都不会再错。7.3 调度算法在业务系统里的变体说一个课堂之外的真实场景分布式任务队列里的调度器。它和操作系统的CPU调度很像只不过“CPU”被抽象成了“一个worker节点”“进程”变成了“一个任务”。平均周转时间在这里就对应着任务从提交到执行完的延迟公平性则是不同租户之间的资源配额问题。你甚至可以把SJF的思想用在任务队列上——如果短任务总是被长任务堵住用户的体验会非常差所以很多任务队列会倾向给短任务更高的优先级。这些跨领域的联想是操作系统课真正有价值的地方。虽然我们当时只是在一个课堂小测里计算几组数字但那套思考问题的框架换到任何有“资源竞争”场景的系统里都还能用。最后再分享一件我自己复习时觉得很有用的小事把每种调度算法都用一个真实场景去打比方。FCFS就是食堂排队SJF就是“让点餐快的人先打饭”RR就是每人限时吃一口然后轮换MLFQ则是银行的分窗口服务——VIP窗口、普通窗口、自助机你一旦在某个窗口等太久还会被“叫号”提升优先级。这样类比之后那些抽象的概念一下就立体了。希望这篇复盘对正在被操作系统折磨的你有点帮助也欢迎你在评论区聊聊你在这块踩过哪些坑。

相关新闻

自动控制系统入门:从零搭建闭环与PID参数整定实操

自动控制系统入门:从零搭建闭环与PID参数整定实操

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 1:26:06 阅读更多 →
Arduino Nano分数显示器DIY:硬件选型、电路连接与稳定显示实战

Arduino Nano分数显示器DIY:硬件选型、电路连接与稳定显示实战

1. 从一个"不起眼的小附件"说起:分数显示器到底解决了什么问题很多人第一次看到"Arduino Nano分数显示器"这个标题,第一反应可能是:这不就是个显示比分的玩意儿吗,能有什么技术含量?我一开始也是这…

2026/10/13 1:26:06 阅读更多 →
JavaScript公式编辑器:低代码报表中的解析与交互实战

JavaScript公式编辑器:低代码报表中的解析与交互实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 1:26:06 阅读更多 →

最新新闻

老版本旅游CMS手机端模块app_mobilelbs兼容性修复与渐进式替换实战

老版本旅游CMS手机端模块app_mobilelbs兼容性修复与渐进式替换实战

简介:这份资源是思途旅游CMS V6.0手机端模块app_mobilelbsV5.0等老版本通用的破解版源码包,面向旅游行业开发者、二次开发人员及中小旅行社技术团队,用于搭建线路管理、酒店预订、门票销售、租车服务与用户管理等一体化后台系统。压缩包共126…

2026/10/13 2:19:28 阅读更多 →
hugo-theme-academic-cv 实战:Hugo Blox 项目结构、站点配置与内容格式化完整指南

hugo-theme-academic-cv 实战:Hugo Blox 项目结构、站点配置与内容格式化完整指南

前端 【免费下载链接】hugo-theme-academic-cv 🎓 Academic portfolio that boosts citations. AI generates pages, you own as Markdown. BibTeX auto-import, Jupyter, LaTeX, slides, visual block editor — free to host forever. 学术主页,AI 生成…

2026/10/13 2:19:27 阅读更多 →
燃气安全新国标落地:从单点报警到智慧互联的系统设计与实践

燃气安全新国标落地:从单点报警到智慧互联的系统设计与实践

燃气行业这两年最大的变化,不是设备外观变得多高级,而是“燃气安全新国标落地”这件事,把整个行业的游戏规则彻底改写了一遍。过去我们聊燃气报警,默认就是“厨房墙上挂一个探测器,响了再说”,本质上是个单…

2026/10/13 2:19:27 阅读更多 →
MCP工具错误排查:三条探针定位错误传输通道

MCP工具错误排查:三条探针定位错误传输通道

你是不是也遇到过这种情况:MCP 工具在自己的测试脚本里跑得好好的,一接进宿主端就“失灵”,页面既不显示错误,也不返回数据,看起来就像工具从来没执行过。更气人的是,你把同样的入参丢回本地脚本&#xff0…

2026/10/13 2:19:27 阅读更多 →
lakeFS Python SDK 认证令牌 AuthenticationToken:JWT 登录令牌模型与实战指南

lakeFS Python SDK 认证令牌 AuthenticationToken:JWT 登录令牌模型与实战指南

数据工程数据湖大数据对象存储后端 【免费下载链接】lakeFS lakeFS - Data version control for your data lake | Git for data 项目地址: https://gitcode.com/gh_mirrors/la/lakeFS 点击查看 免费下载 本篇技术指南聚焦 lakeFS Python SDK(lakefs_sd…

2026/10/13 2:19:27 阅读更多 →
Reclilisib:从PI3K激动剂到选择性辐射保护剂的双重角色

Reclilisib:从PI3K激动剂到选择性辐射保护剂的双重角色

做肿瘤放疗研究的朋友应该都有过这种纠结:治疗窗口太窄,射线过去,肿瘤细胞和正常组织一起遭殃。我们这些年一直在找"选择性辐射保护剂"——最好能保护正常细胞,却不给肿瘤细胞留活路。我第一次注意到Reclilisib&#xf…

2026/10/13 2:18:27 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →