内核学习之路第1期:从UNIX到Linux,再看操作系统五十年演进史

发布时间:2026/10/8 19:59:46
内核学习之路第1期:从UNIX到Linux,再看操作系统五十年演进史 正式开写之前先交代一下这个系列是怎么来的。前两年我负责的一台高负载Nginx节点上有个玄学问题每隔几天就会出现几十毫秒的卡顿应用层日志、数据库慢查询、网络抓包全部查过都找不到原因。最后用perf把这几十毫秒钉在了do_syscall_64到__x64_sys_epoll_wait这条内核路径上才确认是调度器唤醒竞争加上epoll机制导致的。那次故障让我彻底想通了一件事——内核就在那里你不主动去学它它迟早会以一种你不太舒服的方式找上门来。所以这个《内核学习之路》系列诞生了给自己定了100期的计划从进程、内存、文件系统、网络协议栈到驱动、虚拟化、实时性一篇篇啃。今天这篇是第1/100期先讲历史。为什么第一篇要讲历史因为内核这个领域太多设计决策的来源都藏在历史里。为什么Linux里进程调度用CFS而不是别的算法为什么Windows的图形系统放内核里被骂了几十年还不挪出来为什么Android会冒出GKI这种东西这些问题的答案都不是纯逻辑推演能推出的必须回到特定的硬件约束、商业博弈和时代背景中去看。先把历史脉络捋清楚后面学任何模块都会比一开始就扎进源码里要通透得多。1. 内核到底是什么以及为什么市面上有那么多内核1.1 没有内核的世界程序各自为战想理解内核先想想没有内核会是什么样子。一台计算机上只有一个CPU、一块内存、一堆外设而你想同时打开浏览器写文档、听歌、后台跑编译。如果没有一个中间角色来分配CPU时间片、管理内存地址、调度磁盘访问那每个程序就只能靠自觉协作这显然不现实。所以内核本质上就是一个资源管家 交通警察。它管三件事CPU怎么分、内存怎么分、设备怎么访问。为了做到这一点现代CPU提供了特权级机制——用户程序运行在低特权级比如x86的ring 3内核运行在高特权级ring 0。用户程序想干任何稍微硬核一点的事比如读文件、开网络连接、创建进程、申请内存都必须通过系统调用陷入内核让内核代表它去执行。这个陷入动作是理解一切内核行为的关键。当年我在应用层排查性能问题时习惯性地看CPU、看内存、看IO但从来没想过每一次read()背后实际上有一段完整的用户态→内核态→设备驱动→中断返回的往返路径。等到用strace把程序系统调用看得清清楚楚、再用perf看到内核栈时才算真正建立起用户态和内核态是两层不同的世界这个认知。1.2 热词里的内核众生相为什么必须分清语境你打开搜索引擎输入内核两个字会发现这个词被用到了无数场景里浏览器内核、安卓GKI内核、AI框架里的算子内核、游戏模拟器内核、各种第三方定制内核。这里必须做一个概念区分。浏览器内核比如Blink、WebKit以及腾讯X5这类基于Chromium的方案解决的是HTML/CSS/JavaScript的渲染和解释问题它本质是个软件层不用管CPU特权级也不必调度物理内存。AI框架里常说的kernel指的更是具体的计算核函数比如CUDA里那个在GPU上跑的__global__函数。这些内核和操作系统内核完全不是一回事。而大家讨论KernelSU、讨论GKI、讨论ko驱动模块时说的内核才是操作系统内核也就是Linux内核本身。这篇100期系列要啃的就是这个东西。后面如果出现内核两个字默认指操作系统内核不再反复强调。2. 内核的史前史批处理、中断与分时的接力2.1 插线板时代最早的计算机没有操作系统回到1940年代。ENIAC那一代的计算机没有操作系统没有任何常驻管理程序。所谓编程就是插拔电缆、拨动开关、读纸带。一个时刻只有一个程序员、一个任务独占整台机器。那个时候的计算机慢得让人心碎相对今天的标准但更关键的问题是它贵得可怕。一台机器动辄几百万美元却只能一次跑一个人的程序这在商业上是完全没法接受的。哪怕在1960年代一台IBM大型机的价格也足够买一栋楼而程序员在机器前冥想、插线、调试的时间往往好几个小时。这种昂贵机器 低效使用之间的矛盾直接催生了操作系统的第一个原始形态。2.2 批处理与监控程序内核的胚胎最早期的解决方案是批处理。思路很简单不要再让人直接操作机器了把作业写到穿孔卡片上由一个常驻内存的程序批量读取、逐个运行。这个常驻内存的程序就是后来的监控程序monitor它负责几件事把作业从输入设备读入内存、跳到作业的入口地址运行、作业结束后回收内存并加载下一个作业。虽然功能简陋得可怜但常驻内存 管理系统资源 作业调度这三个特征已经具备了内核最基本的内核责任。后来工程师发现监控程序运行期间用户程序可能搞坏系统于是又加入了管理态/用户态的区分——用户程序不能随便执行特权指令。这不就是现在ring 0/ring 3的雏形吗所以如果你问内核是什么时候出现的我的答案不是某个具体年份而是从第一批人意识到——计算机的资源必须由一个可信赖的底层软件来统一管而不是让每个程序自己抢——那一刻起内核的种子就埋下了。2.3 中断的发明内核存在的第一个核心技术理由比监控程序更早出现、但真正改变一切的技术发明是中断。想象一个没有中断的计算机。CPU要读磁盘就只能不停轮询磁盘控制器的状态寄存器看数据是不是准备好了。这段时间CPU被白白浪费。而有了中断之后CPU可以先去办别的事等磁盘控制器完成操作主动向CPU发一个中断信号CPU再切过去处理。这个机制让CPU和IO设备并行工作成为可能计算机的吞吐量直接上一个量级。更深层的影响在于中断让操作系统重新夺回了控制权。分时系统、任务抢占、时间片轮转全都建立在这个基础上——时钟定时器每隔一小段时间就中断CPU一次操作系统趁这个中断把当前进程挂起调度另一个进程上CPU。如果没有中断操作系统拿什么去打断一个失控的用户程序靠用户程序自觉让出那叫协作不叫操作系统。所以学内核的人无论如何都要把中断模型吃透。中断现场怎么保存、中断嵌套怎么处理、下半部机制softirq/tasklet/workqueue为什么存在这些放在后面章节细讲。今天先把中断之于内核的意义刻在脑子里没有中断就没有操作系统。2.4 分时系统让独占变成共享到了1960年代初MIT的CTSS系统把时间片轮转真正落地了。多台终端连到一台大型机上每个用户轮流分到一小段CPU时间。因为计算机跑得快每个用户都会觉得自己独占了机器。这就是分时魔法。分时系统带来的不只是技术突破更是交互方式的革命程序员可以一边输入一边看结果不用再等批处理排队。这种即时反馈的体验让MIT的一帮人野心膨胀搞了个叫Multics的大项目要做信息公共事业上百人联合开发系统庞大复杂到难以收场最后贝尔实验室撤了资。Multics虽然失败了但它留下了两个遗产一批被伤过但更清醒的工程师以及分时交互这个被证明无比好用的产品形态。其中有一个叫Ken Thompson的工程师对Multics的官僚化研发极度厌倦决定做点什么小而美的东西。这就是UNIX的前夜。3. Unix的诞生一个游戏爱好者随手改变世界3.1 为了玩《太空旅行》而写操作系统1969年的贝尔实验室Ken Thompson写了一个叫《Space Travel》的太空模拟游戏在PDP-7小型机上跑。为了让这个游戏跑得更爽他用几个星期时间写了一个多任务文件系统然后把这个系统命名为UNIX。UNIX这名字不是啥高深术语就是当时贝尔实验室同事的恶搞意思是阉割了的Multics。但恰恰是这种少即是多的姿态造就了后来统治世界五十年的设计哲学。别看UNIX最早只是个玩具它一出生就带上了三个关键特征层级化文件系统、可复用的进程模型、以及一切皆文件的统一IO抽象。这里插一句经验很多人在第一次看Linux内核时被各种子系统搞懵但如果往前追溯到UNIX的最初形态——一个游戏跑在PDP-7上需要文件系统来存取数据、需要进程来跑游戏逻辑、需要设备抽象来读写终端——你就能理解内核的核心本质从来就没变过只是规模变大了巨量倍数。3.2 用C语言重写操作系统第一次可移植1970年代初UNIX基本是汇编写的绑死在PDP-7/PDP-11上。Dennis Ritchie发明了C语言然后在1973年他和Ken Thompson用C语言把UNIX重写了一遍。这一下子把操作系统的历史切成两段。前一段每一个操作系统都绑死一款硬件换CPU就要全部重写。后一段操作系统可以在不同硬件架构间移植编译一下就能跑了。C语言这个面向汇编的便携汇编器真正意义是带类型系统的高级语言但编译出的代码效率足够接近汇编让UNIX成为了第一个具备可移植性的操作系统。我们今天能轻松地在x86、ARM、RISC-V上跑同一个Linux内核这条路就是从1973年那次重写开始铺出来的。Linus后来选择C语言写Linux不是偶然而是这条已经被验证了二十年的路。3.3 一切皆文件Unix/Linux内核设计基因UNIX最被后人称道的设计决策是把文件、设备、管道、套接字全部统一成文件描述符这一个概念。文件用open/read/write/close设备也这么操作管道也这么操作网络套接字也这么操作。这个抽象的威力怎么夸都不为过。它让整个用户态API变得极其统一也让内核内部的虚拟文件系统VFS层可以挂接任何底层实现——ext4、xfs、nfs、procfs、sysfs全都可以通过同一套read/write暴露出来。你去看今天的Linux内核VFS层就是一颗枝繁叶茂的大树底下最粗壮的那根主干。我当年在追踪一个性能问题时发现某个进程频繁read一个/proc下的文件这才意识到procfs的本质其实也是文件。那一刻我才真正领略到一切皆文件的层叠抽象功力。后面学文件系统子系统时我对VFS和具体文件系统的关系有了更深的体会——上层只认fd下层各显神通。3.4 从贝尔实验室到伯克利一场意外的分叉ATT最初把UNIX当作学术资源以近乎免费的价格授权给大学。加州大学伯克利分校拿到源码后Researchers们一边用一边改搞出了著名的BSDBerkeley Software Distribution。BSD把什么好东西带进来了TCP/IP协议栈就是BSD的功劳现代网络世界的基石曾经就是在校园网里跑起来的。然后ATT一看这玩意能赚钱啊开始商业化和BSD的分歧演变成1992年的版权诉讼。这场恩怨直接导致了一件事很多大学和公司不敢再碰Unix源码转而寻求一个没有版权纠纷的替代品。这个需求被一个芬兰学生敏锐地捕捉到了。4. Linux的崛起与当代演化从BBS帖子到GKI4.1 1991年那条改变了计算史的帖子1991年8月25日Linus Torvalds在comp.os.minix新闻组发了一条帖子。大意是我正在为386486AT克隆机做一个免费的业余爱好操作系统不会像GNU那样庞大和专业。我打算在明年做好准备但想听听大家认为它缺少什么特性。那时候Linus手里有一台386装的是教学用系统Minix。Minix是Tanenbaum教授为了教学写的简化版UNIXLinus觉得它的终端模拟器实在难用于是决定自己动手写一个。写着写着为了传文件、看新闻他又写了磁盘驱动、文件系统最后这玩意膨胀成了一个操作系统内核。这里有一个特别值得玩味的细节Linux的第一版0.01版用的是自定义许可证禁止商业使用。直到1992年的0.12版Linus才切换成GPLv2。这个决策的影响怎么强调都不为过——如果Linux用的是自由但禁止商用的许可证它大概率不会成为今天的Linux。GPL的copyleft属性确保了这个系统永远不会被某一家公司锁死这是Linux后来能和Windows正面竞争而不被收购、不被分裂的根本原因。4.2 为什么Linux赢了许可证、互联网与工程风格复盘Linux击败其他候选系统的过程能总结出至少三个关键因素。第一是许可证。前面说了GPL保证了开放 传染 不可闭源每家公司都能拿去商用但改进成果必须回馈社区。这个机制建立了巨大的信任基础也让Linux永远不会退化为某个公司的私产。第二是互联网。1990年代正值互联网爆发Linus每天晚上把代码打包发出来全球各地的程序员下载、测试、改bug、再发回去。这种分布式协作的效率碾压了所有封闭团队。打个比方GNU计划的组织者Stallman是个理想主义者他更关注自由这个政治目标而Linus更关注能不能跑。一个是哲学家一个是工程师结果工程师赢了市场。GNU的Hurd微内核拖了二十多年没做出来Linus的内核区区几年就占领了全世界的校园网服务器。第三是Linus的工程风格概括起来就是早发布、勤发布、听反馈。他从来不是坐在那里三个月憋一个大完美的架构而是复用一个能跑的马甲跑起来然后迭代。这种风格后来固化为Linux内核的发布节奏——9到10周一个版本永远不停止滚动。4.3 内核版本与模块从ko驱动到LTSLinux的版本号演进本身就带了点工程师的随性。1994年3月发布1.02003年12月升到2.6然后2.6一路小版本号攀升到几十。2011年Linus直接把版本跳到3.0理由仅仅是2.6这个数字看腻了。2019年跳到5.02022年跳到6.0。中间有个著名轶事Linus本来想4.0之后用4.20但觉得4.20这个数字讲出来会被嘲笑直接跳成5.0。这种无所谓数字、只有内核本身才能说明一切的态度很Linus。在实操层面新手最需要掌握的是这两条用uname -r查看当前内核版本。用dpkg -l | grep linux-image查看Ubuntu系统装了哪些内核镜像。至于内核本身的结构LKMLoadable Kernel Module机制是Linux的重要家族基因。驱动程序以.ko文件形式存在可以动态加载进内核不需要重新编译整个内核。你在嵌入式板卡上编译内核驱动时最终产出的往往就是一堆ko文件。这也解释了为什么热词里会出现android内核驱动ko这种说法——Android的厂商驱动本质上就是一堆内核模块。实践上加载一个ko模块的三板斧是insmod xxx.ko或modprobe xxx、lsmod看是否加载成功、rmmod卸载。我用这个流程排查过无数驱动加载问题后面写设备驱动章节时再展开。4.4 Android与GKILinux内核在移动生态的形态聊完桌面和服务器再聊移动端。Android系统跑在Linux内核上这谁都知道。但真正了解的人都清楚手机厂商对内核的定制已经到了面目全非的程度。每家改一块内核版本五花八门安全补丁根本没法统一推。比如某厂商还停留在Linux 4.14另一个厂商已经升级到了5.10这种碎片化让上游安全补丁的合入变得极其痛苦。Google推的GKIGeneric Kernel Image就是针对这个问题的把内核本体和厂商驱动解耦。内核本体由Google在每代Android版本中统一构建、统一升级厂商的驱动以模块形式独立加载不再需要把厂商定制的内核打成一个整体。这样一来安全更新就能直接替换内核镜像而不动厂商驱动。所以你会看到一些利用内核漏洞的第三方工具比如KernelSU会强调只支持GKI内核。因为GKI体系里内核是标准的、可预测的第三方工具只需要为Google的标准内核做适配不用去对付几百个厂商的魔改版本。GKI不是性能优化它是生态治理策略。理解这一点再看那些讨论kernelsu只支持gki内核怎么解决的帖子时你就知道问题出在哪一层了不是工具不行而是你手上的内核不是GKI。5. 另一条岔路Windows NT与宏内核/微内核之争5.1 比尔·盖茨的遗憾与NT的诞生微软的历史从来不是一路趾高气扬。DOS是IBM PC时代的权宜之作Windows 3.x/9x的底层依然建立在DOS的实模式之上脆弱得一塌糊涂——一个非法操作就能蓝屏图形系统只是挂在DOS上的一层华丽的壳。DOS/Windows 9x的架构在1990年代已经明显到瓶颈没有内存保护、没有抢占式多任务、32位进程能轻松踩到另一个进程的内存。微软也知道这个问题所以1988年就开始秘密开发一个全新的操作系统内核代号NTNew Technology。1993年Windows NT 3.1发布这是微软第一次拥有一个真正意义上的现代操作系统内核独立的32位地址空间、抢占式多任务、可移植到多架构、有安全模型。对比DOS家族的半现代NT是一次彻底的推倒重来。很多圈外人感叹微软基础内核厉害都是它开发的其实这种说法不完全准确。但对于NT这个具体作品确实应该给予尊重——它的稳定性和设计深度在商业操作系统里是第一梯队的。5.2 卡特勒与VMS的影子NT的设计血统NT的灵魂人物是Dave CutlerDEC数字设备公司的传奇设计师一手打造了VAX/VMS系统。1988年微软把他挖到Redmond让他全权负责NT。VMS积累的经验几乎原封不动地带进了NT进程和线程的结构、IO管理层分级、内核对象模型都能看到VMS的影子。提到NT不能绕过一个争议NT 4.0把图形绘制Win32 GDI从用户态进程搬进了内核。这在设计上是不纯的——图形代码容易出bug放进内核意味着崩溃就直接蓝屏。微软为什么这么做性能。当时把图形放用户态通过进程间通信调用太慢了。这是一个非常典型的工程妥协理论上的优雅让位于实践中的性能。这个决策被学术界批评了很多年但Windows的市场成功证明了一个事实微内核的纯粹性在性能面前没有那么大的话语权。Windows后来在Vista上尝试把图形驱动移出内核WDDM模型一定程度上缓解了问题但核心架构依然走过这条路。5.3 那场著名的Tanenbaum vs Torvalds之争1992年Linux刚冒头时Minix的作者Andrew Tanenbaum在新闻组上发了一篇雄文核心观点是Linux采用宏内核是过时设计的巨大倒退微内核才是未来。Linus毫不客气地回击两个人吵了好几个回合。Tanenbaum的论点有学术依据——微内核把操作系统功能拆成独立服务内核只保留最小核心IPC、调度、地址空间管理理论上稳定性更高、可扩展性更好、更强壮。这个思路直到今天依然在学术圈被推崇。Torvalds的论点直白粗暴微内核在真实硬件上的IPC性能开销太大了你设计得再优雅跑慢就是跑慢而宏内核把驱动都放进去、同一地址空间共享性能就是能打。结果大家都看到了Linux赢了市场Tanenbaum后来也公开承认Linux的宏内核路线在工程上取得了巨大成功。但这不意味着微内核思想全无价值——今天Windows NT的混合内核结构、macOS XNU中很多模块化设计都在某种程度吸收了微内核的模块化优点。5.4 工程折中的胜利今天的混合内核如果拿纯宏内核和纯微内核当两个极端来标记当今主流操作系统会得到这样一个结论没有人站在极端点上。Linux主体是宏内核所有驱动、文件系统、调度都在内核态但支持LKM动态加载卸载某种程度上具备运行时模块化能力。WindowsNT的设计目标靠近微内核有独立的执行体、子系统进程、硬件抽象层但大量驱动和图形组件实际运行在内核态业界更准确地叫它混合内核。macOS/iOS的XNU内核对象模型和IOKit是Mach微内核的延伸但BSD部分承担文件系统和网络栈同样走混合路线。所以今天再回头看那场争论真正的赢家不是宏内核也不是微内核而是工程折中。操作系统是跑在真实硬件上给真实软件用的设计上的洁癖必须让位于性能、兼容性和可维护性。学内核如果只抱着某某架构最正确的执念大概率是要吃亏的。6. 现代内核的疆域虚拟化、实时与嵌入式6.1 KVM与VT-x内核变成虚拟机监视器进入21世纪后内核的舞台上多了两个重要的新角色虚拟化和容器。容器用的是namespace cgroup本质还是同一个内核做隔离只是让容器看起来像独立的系统而虚拟化是真真切切在同一个物理机上跑多个完整的内核。Linux在2007年把KVMKernel-based Virtual Machine合入主线后Linux内核本身摇身一变成了一个Hypervisor。KVM的实现思路非常聪明让VM里的VCPU线程作为一个普通进程被内核调度但通过硬件虚拟化扩展Intel VT-x、AMD-V让CPU硬件自己区分root模式hypervisor和non-root模式guestguest CPU指令可以直接跑在硬件上不需要软件模拟。这样虚拟机性能才能做到接近裸机。这也是为什么现在主流服务器上装虚拟机都要去BIOS里开VT-x/VT-d。如果不开KVM和VMware这些能不能跑能跑但只能用软件模拟二进制翻译或纯软件MMU性能会掉到无法接受的程度。很多人在配置环境时忽略了BIOS这一步然后虚拟机卡到怀疑人生根源就在这里。6.2 实时内核与工业控制关超线程背后的原因普通Linux内核不是硬实时的。CFS调度器追求的是整体吞吐量和公平性某个进程什么时候能被调度到取决于系统当前负载无法保证在微秒级时间窗口内完成响应。工业控制场景则恰恰相反——PLC扫描周期要求严格确定抖动过大就是生产事故。于是有了实时化的方案。经典路线是PREEMPT_RT补丁目前大部分已合入5.10之后的主线它把内核中几乎所有的不可抢占临界区都改造成可抢占的配合中断线程化让Linux具备硬实时能力。另一条路线是在Windows/普通系统上跑一个独立的实时内核让原来的OS变成一个低优先级的idle任务。这里插一个实操细节也是我在工控现场摸爬滚打学到的在配置TwinCAT TC3这类软PLC运行环境时BIOS里有两项设置几乎是强制性的——关闭Hyper-Threading超线程打开Intel VT-x。为什么因为实时内核要求CPU核不能被任何东西干扰而超线程恰恰是两个逻辑核共享同一组物理执行单元任何一个核上的负载波动都可能通过共享资源传导到另一个核上产生不可控的时序抖动。VT-x则是因为实时扩展往往需要硬件虚拟化支持来实现对普通操作系统的隔离接管。这里面每一条都对应着真实的现场故障不提前配好跑起来之后时好时坏排查会让你怀疑人生。6.3 嵌入式内核裁剪与定制才是常态内核的另一个大舞台是嵌入式。你家里的路由器、智能电视、车机、摄像头大量跑着Linux内核。嵌入式场景和服务器场景有一个显著差异资源有限必须裁剪。所谓内核裁剪本质上就是用menuconfig打开配置界面关掉不需要的功能模块把内核编到最小。比如一个路由器只需要网络栈、NAT、Wi-Fi驱动那就可以关掉大量块设备驱动、文件系统、声音子系统内核镜像从几MB缩到几百KB。热词里有人提到linux内核裁剪八股恰好说明这已经成了面试和考试中的高频题目——但真正的裁剪不是背概念而是理解每个CONFIG_*选项背后的代码路径和依赖关系这是后面写内核配置章节时的重要话题。嵌入式里还有一大类完全不同的内核世界裸机MCU比如Cortex-M4这类芯片上跑的FreeRTOS、RT-Thread、Zephyr。它们和Linux有本质差别——通常没有MMU单地址空间整个系统更像一个库而不是独立的操作系统内核。但中断、调度、内存管理、驱动模型这些核心概念是相通的。我见过很多人从Linux转学RTOS只要中断和调度模型过关上手非常快反过来如果一开始就在Linux应用层打转没碰过中断到了MCU世界就会很吃力。我的个人体会为什么内核学习一定要从历史开始最后说点个人的学习心得也算给这个系列定个调。我最开始学内核时也想直接怼源码觉得历史没用。后来陷进一堆反直觉设计里——比如为什么Linux内核里有些代码看起来有冗余为什么某些API的命名这么奇怪为什么一个调度器要搞出那么多种形态答案几乎全部藏在历史里有的是为了兼容某个老硬件的怪癖有的是为了平息某场社区吵架有的是因为某个提交实在没法破坏向后兼容所以只能再叠一层。没有历史视角你面对这些代码会觉得自己很笨有了历史视角你会觉得自己在跟一个走了五十年的老朋友聊天——他的每道疤你都知道来历。所以如果这篇系列的历史篇能给你留下一个什么印象我希望是内核不是一堆天才拍脑袋设计出来的完美系统而是一堆工程师连续五十多年在真实硬件、真实负载、真实事故的捶打中迭代出来的活物。它处处是妥协但正是这些妥协让它活到了今天。后面第2期我会从进程管理讲起到时候会配合动手实验——从/proc读起再用perf去看真实进程的调度轨迹。过程中有任何问题欢迎在评论区聊聊毕竟这100期既是写给你们的也是写给我自己的。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询