热点
系统架构师:移动H5站长MySQL事务控制实战精讲,reasoning_content:我们要求以系统架构师的口吻,写一个与技术、科技相关,关于[移动H5站长进阶:MySQL事务控制实战精讲]的标题需要直接输出一个标题,不要加说明提示等信息简短精炼,字数控制在30字以内nn关键点:系统架构师口吻,技术、科技相关,围绕MySQL事务控制实战精讲,针对移动H5站长进阶标题要体现专业性和实战性,同时符合系统架构师的视角nn可能的架构师视角:MySQL事务控制实战精要 或者 系统架构师:移动H5站长必知的MySQL事务控制 但需要更简短nn考虑:30字以内,直接输出最好包含系统架构师或类似身份提示比如:系统架构师精讲:MySQL事务控制实战 但可能太泛或者架构师实战:MySQL事务控制与H5性能优化 但字数可能超nn更精准:针对移动H5站长进阶,所以可以写:移动H5站长进阶:架构师带你玩转MySQL事务控制 字数27?数一下:移动H5站长进阶:架构师带你玩转MySQL事务控制 – 共17个汉字+一个冒号,算标点符号?标点不算字数?通常标题字数算汉字和字母数字中文标点一般不算字数但要求30字以内,是指字符数?通常指汉字保险起见:16个汉字(移动H5站长进阶:架构师带你玩转MySQL事务控制 其中H5是字母数字,算2个字符,汉字15个?更精确:移动H5站长进阶:架构师带你玩转MySQL事务控制 – 移动(2)、H5(2)、站长(2)、进阶(2)、:(1)、架构师(3)、带你(2)、玩转(2)、MySQL(5)、事务控制(4) -> 总共2+2+2+2+1+3+2+2+5+4=25个字符30以内,可以nn但更简洁:可以去掉带你玩转,改成架构师详解MySQL事务控制实战或者系统架构师:MySQL事务控制实战精讲(15字)但需要体现移动H5站长进阶原题目是移动H5站长进阶:MySQL事务控制实战精讲,我们以系统架构师口吻,可以改成系统架构师视角:移动H5站长MySQL事务控制实战(19字)nn或者直接:架构师精讲:移动H5站长MySQL事务控制实战(17字)要包含技术、科技相关?其实事务控制就是技术,但题目要求与技术、科技相关,这自然相关所以没有问题nn输出一个标题即可我选择:系统架构师:移动H5站长MySQL事务控制实战精讲 字数:系统架构师(4)、:(1)、移动H5站长(5)、MySQL(5)、事务控制(4)、实战精讲(4) -> 4+1+5+5+4+4=23字完美
iOS开发进阶:MySQL事务处理与加载优化实战,reasoning_content:我们要求以加载优化师的口吻,写一个与技术、科技相关,关于[iOS开发进阶:精通MySQL事务处理与控制实战指南]的标题注意:主题是iOS开发进阶,但内容是MySQL事务处理与控制实战指南这似乎是一个跨领域的标题,实际上MySQL是数据库,通常与后端相关,但这里说iOS开发进阶,可能是指iOS开发中需要用到MySQL?或者是一个面向iOS开发者讲解MySQL事务的教程?要求简短精炼,30字以内需要体现加载优化师的口吻,可能带有优化、加载、性能等词汇但原书/文章标题是[iOS开发进阶:精通MySQL事务处理与控制实战指南],我们可以直接改编为更简洁的标题nn例如:iOS开发进阶:MySQL事务控制实战 但不够有加载优化师特色可以加上加载优化相关词汇?但主题是事务处理与控制,与加载关系不大或许可以用高性能、优化等词加载优化师通常关注加载速度、性能优化所以可以写:iOS开发中MySQL事务性能优化实战 但字数稍多考虑:iOS开发进阶:MySQL事务控制与性能优化 共17字或者更直接:iOS开发MySQL事务控制实战指南 但缺少进阶或者用原标题精简nn严格按要求:直接输出一个标题,不要加说明所以输出类似:iOS开发进阶:MySQL事务控制实战 但为了体现加载优化师,可以改为:iOS加载优化:MySQL事务控制实战?但与原主题稍偏最好保留iOS开发进阶或者:iOS开发进阶:MySQL事务性能优化指南 共18字符合30字nn我决定输出:iOS开发进阶:MySQL事务控制实战指南 共16字但没体现加载优化师口吻或许可以:iOS加载优化:MySQL事务控制与性能实战 17字或者:iOS开发进阶:MySQL事务控制与加载优化 18字我觉得后者不错,把加载优化融入进去但原主题是精通MySQL事务处理与控制,所以控制和处理都有我们可以写:iOS开发进阶:MySQL事务处理与加载优化实战 共20字这样既包含技术,又体现加载优化师nn最终选定:iOS开发进阶:MySQL事务处理与加载优化实战
Go语言MySQL事务控制实战解析与优化技巧,reasoning_content:我们要求以内容管理者的口吻,写一个与技术、科技相关,关于[Go语言MySQL事务控制实战解析与优化技巧]的标题要求直接输出一个标题,不要加说明提示等信息;简短精炼,字数控制在30字以内nn内容管理者口吻,可能偏向于实用、实战、解析、优化等标题要涵盖Go语言、MySQL事务控制、实战解析、优化技巧可以像“Go MySQL事务控制实战:解析与优化技巧”但注意字数或者更精炼:“Go语言MySQL事务控制实战与优化”需要控制在30字以内中文字数统计:每个汉字算一个,标点也算试试:“Go语言MySQL事务控制实战解析及优化技巧”字数:Go语言(2)、MySQL(5? 实际上MYSQL是5个字母但中文写成MySQL通常算一个词?严格说中文标题中“MySQL”算4个字符?通常我们认为“MySQL”是英文单词,在中文标题中算一个单位但字数统计时按字符算为了保险,用全中文:比如“Go语言MySQL事务控制实战解析与优化技巧” – 数一下:Go语言(2)、MySQL(5个英文字母但按中文算?最好用中文表达“MySQL”通常直接写,但字数可以按汉字加英文字母算,但题目要求字数控制在30字以内,通常指汉字字符数,英文算一个字符为了简单,用中文短语可以写:“Go语言MySQL事务控制实战解析与优化技巧”字符数:Go(2字母)、语言(2汉字)、MySQL(5字母)、事务控制(4汉字)、实战解析(4汉字)、与(1汉字)、优化技巧(4汉字) 总计:2+2+5+4+4+1+4=22个字符(英文字母算一个,汉字算一个)22
16 9 月 2026, 周三

我们知道操作系统的特性是:在任何时间内,CPU有且只有一个任务在运行。如果没有一个任务在运行,CPU在做什么的?

事实证明,这种情况非常普遍,对于大多数个人计算机来说,它实际上是常态:睡眠过程的进程,都在等待某些条件唤醒,而近100%的CPU时间正在这个神秘的“空闲任务”中。事实上,如果CPU一直忙于普通用户,那通常是有问题的,或者是恶意软件在霸占CPU。

空闲CPU在做什么?

为了保持设计的一致性,OS开发人员创建了一个空闲任务,当没有其他工作时,该任务将被安排运行。我们在Linux 启动过程中已经看到,空闲任务是进程0,它是计算机首次打开时运行的第一条指令的直接后代。它在rest_init中 初始化,其中init_idle_bootup_task初始化空闲调度类。

简而言之,Linux支持不同的调度类,例如实时进程,常规用户进程等。当选择进程成为活动任务时,将按优先级顺序查询这些类。这样,“核反应堆控制代码”总是在Web浏览器之前运行。但是,这些类通常会返回NULL,这意味着它们没有合适的运行过程 – 它们都在睡觉。但是最后运行的空闲调度类永远不会失败:它总是返回空闲任务。

这一切都很好,但让我们来看看这个空闲任务究竟在做什么。cpu_idle_loop,如下:

cpu_idle_loop

  1. while(1){ while(!need_resched()){ cpuidle_idle_call(); } 
  2.   
  3.  / * 
  4.  [注意:切换到其他任务。当 
  5.  再次选择空闲任务运行时,我们将返回此循环。] 
  6.  * / 
  7.  schedule_preempt_disabled(); 

我已经省略了很多细节,我们稍后会仔细研究任务切换,但是如果你阅读了代码,你会得到它的重要信息:只要不需要重新安排,即改变活动任务,CPU就会一直空闲。以经过的时间来衡量,这个循环及其在其他操作系统中的表兄弟可能是计算历史中执行最多的代码片段。对于英特尔处理器,传统上保持空闲意味着运行暂停指令:

native_halt

  1. static inline void native_halt(void) 
  2.  asm volatile("hlt": : :"memory"); 

hlt停止处理器中的代码执行并将其置于暂停状态。奇怪的是,全世界数以百万计的类似英特尔的CPU正在花费大部分时间停止工作,即使在他们通电的情况下也是如此。它也不是非常有效的节约能源,这导致芯片制造商为处理器开发更深层次的睡眠状态,从而在更长的唤醒延迟中消耗更少的功耗。内核的cpuidle子系统负责利用这些节能模式。

现在,一旦我们告诉CPU停止或睡眠,我们需要以某种方式让它恢复活力。如果您已阅读过我以前的文章,您可能会怀疑涉及到中断,实际上它们也是如此。中断会刺激CPU退出暂停状态并恢复运行。所以把这些放在一起,这是你的电脑在阅读这篇文章时所做的大部分工作

空闲CPU在做什么?

除定时器中断外的其他中断也会使处理器再次运行。如果你点击一个网页就会发生这种情况,例如:你的鼠标发出一个中断,它的驱动程序处理它,突然一个进程可以运行,因为它有新的输入。此时need_resched()返回true,并且启动空闲任务以支持您的浏览器任务。

这是随时间变化的空闲循环:

空闲CPU在做什么?

在这个例子中,内核将定时器中断编程为每4毫秒(ms)发生一次。这是滴答期。这意味着我们每秒获得250个滴答,因此滴答率或滴答频率为250 Hz。这是在英特尔处理器上运行的Linux的典型值,100赫兹是另一个人群的最爱。这在CONFIG_HZ构建内核时在选项中定义。

现在看起来对于空闲CPU来说看起来像是一项非常多的毫无意义的工作,而且确实如此。如果没有来自外界的新鲜输入,CPU将继续陷入这种地狱般的小睡状态,在您的笔记本电脑电池耗尽时,每秒钟会被唤醒250次。如果这是在虚拟机中运行,我们将从主机CPU烧掉电源和时钟周期。

这里的解决方案是动态勾选,以便当CPU空闲时,定时器中断被取消激活或重新编程,以便在内核知道将要工作的地方发生(例如,进程可能有一个定时器)在5秒内到期,所以我们不能睡过去)。这也称为无滴答模式。

最后,假设您在系统中有一个活动进程,例如长时间运行的CPU密集型任务。这几乎与空闲系统完全相同:上述图保持大致相同,只需将一个进程替换为空闲任务,图景就是准确的。在那种情况下,每隔4毫秒中断任务是没有意义的:它只是操作系统抖动,从而减慢了你的工作量。Linux还可以在这个单进程场景中停止固定速率滴答,即所谓的自适应滴答模式。最终,固定速率蜱可能会消失完全。

这对于一个文章来说已经足够发散了。内核的空闲行为是操作系统难题的重要组成部分,它与我们将看到的其他复杂情况非常相似,因此这有助于我们构建正在运行的内核的图景。

【编辑推荐】

  1. 基于Windows操作系统安装部署Jenkins教程
  2. Linux实用监控脚本——使用 Shell 检测进程 CPU 利用率
  3. Windows 10终于拿下了操作系统市场的半壁江山
  4. 国产操作系统往事:四十年激变,终再起风云
  5. Linux怎么查看正在运行的进程的CPU和内存使用率?

【责任编辑:赵宁宁 TEL:(010)68476606】
点赞 0

dawei

【声明】:北京站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

您错过了

系统架构师:移动H5站长MySQL事务控制实战精讲,reasoning_content:我们要求以系统架构师的口吻,写一个与技术、科技相关,关于[移动H5站长进阶:MySQL事务控制实战精讲]的标题需要直接输出一个标题,不要加说明提示等信息简短精炼,字数控制在30字以内nn关键点:系统架构师口吻,技术、科技相关,围绕MySQL事务控制实战精讲,针对移动H5站长进阶标题要体现专业性和实战性,同时符合系统架构师的视角nn可能的架构师视角:MySQL事务控制实战精要 或者 系统架构师:移动H5站长必知的MySQL事务控制 但需要更简短nn考虑:30字以内,直接输出最好包含系统架构师或类似身份提示比如:系统架构师精讲:MySQL事务控制实战 但可能太泛或者架构师实战:MySQL事务控制与H5性能优化 但字数可能超nn更精准:针对移动H5站长进阶,所以可以写:移动H5站长进阶:架构师带你玩转MySQL事务控制 字数27?数一下:移动H5站长进阶:架构师带你玩转MySQL事务控制 – 共17个汉字+一个冒号,算标点符号?标点不算字数?通常标题字数算汉字和字母数字中文标点一般不算字数但要求30字以内,是指字符数?通常指汉字保险起见:16个汉字(移动H5站长进阶:架构师带你玩转MySQL事务控制 其中H5是字母数字,算2个字符,汉字15个?更精确:移动H5站长进阶:架构师带你玩转MySQL事务控制 – 移动(2)、H5(2)、站长(2)、进阶(2)、:(1)、架构师(3)、带你(2)、玩转(2)、MySQL(5)、事务控制(4) -> 总共2+2+2+2+1+3+2+2+5+4=25个字符30以内,可以nn但更简洁:可以去掉带你玩转,改成架构师详解MySQL事务控制实战或者系统架构师:MySQL事务控制实战精讲(15字)但需要体现移动H5站长进阶原题目是移动H5站长进阶:MySQL事务控制实战精讲,我们以系统架构师口吻,可以改成系统架构师视角:移动H5站长MySQL事务控制实战(19字)nn或者直接:架构师精讲:移动H5站长MySQL事务控制实战(17字)要包含技术、科技相关?其实事务控制就是技术,但题目要求与技术、科技相关,这自然相关所以没有问题nn输出一个标题即可我选择:系统架构师:移动H5站长MySQL事务控制实战精讲 字数:系统架构师(4)、:(1)、移动H5站长(5)、MySQL(5)、事务控制(4)、实战精讲(4) -> 4+1+5+5+4+4=23字完美