- 博客(11)
- 收藏
- 关注
原创 Linux I/O 模型详解与同步/异步、阻塞/非阻塞辨析
Linux 系统提供了多种 I/O 模型来处理输入输出操作,主要区别在于。:有fd数量限制(1024),效率随fd数线性下降。:Linux特有,效率高,支持边缘触发和水平触发。(从内核缓冲区到用户缓冲区)的不同处理方式。:无数量限制,但效率问题类似select。:需要精细控制的高性能程序(需配合轮询):高并发服务器(Nginx、Redis):但可以同时监控多个fd,提高了效率。连接数多但活跃少:I/O多路复用。:高性能磁盘I/O、数据库系统。:基于I/O多路复用,应用程序。:Linux 原生 AIO(
2025-12-06 10:18:40
755
原创 虚拟内存:操作系统最伟大的魔法
当物理内存不足时,操作系统会把暂时不用的内容转移到硬盘的虚拟内存分区(如分页文件、交换文件)中。它让程序员能够编写更大的程序,让操作系统能够同时运行更多的任务,是现代计算机系统不可或缺的核心技术。:运行一个4GB的视频编辑软件时,无需将这4GB全部装入8GB的物理内存,系统仅需加载当前编辑相关的几百MB数据即可。虽然虚拟内存会带来一定的性能开销,但它的好处远远超过了这些代价,可以说是操作系统为应用程序提供的最重要的“魔法”之一。:当进程访问的虚拟地址对应的内容不在物理内存时,会触发。
2025-12-06 09:58:24
439
原创 进程调度方法详细介绍
优先级分为实时、高、中上、中、中下、低等级别。当新进程到达时,如果其预计运行时间比当前进程的剩余时间还短,则抢占CPU。:调度程序可以基于时间片或优先级,强行暂停当前运行的进程,将CPU分配给更高优先级的进程。:可以是静态的(进程生命周期内不变),也可以是动态的(根据等待时间、运行历史等调整)。进程在其生命周期中会在不同的队列间迁移(如就绪队列、各种等待/阻塞队列)。:根据进程类型(如前台交互、后台批处理、系统进程),将就绪队列划分为。:最简单的算法,按照进程到达就绪队列的顺序进行调度(类似排队)。
2025-12-05 11:32:53
697
原创 死锁:概念、检测与恢复
死锁发生的前提:必须同时满足互斥、占有并请求、不可剥夺、循环等待四大必要条件;解决死锁的优先级:设计阶段预防(如统一锁顺序)>运行时避免>发生后检测>最后恢复;核心原则:预防死锁的成本远低于检测和恢复,工程中应优先通过合理的资源分配规则、进程执行逻辑避免死锁,仅在无法预防时才考虑检测和恢复。
2025-12-03 11:38:04
1480
原创 协程核心概念
2. co_yield value - 产出值并挂起(生成器)协程执行 → 遇到挂起点 → 保存当前状态 → 返回调用者。,通过编译器和运行时的协作,在合适的时机进行上下文切换。1. co_await expr - 等待异步操作。有栈协程:有自己的调用栈,Go的goroutine。无栈协程:状态存储在堆上,C++、Rust使用。状态2: 执行B(), 跳转到状态3。状态0: 执行A(), 跳转到状态1。状态1: 挂起等待sleep完成。状态3: 挂起等待read完成。状态4: 执行C(), 结束。
2025-12-03 11:05:45
592
原创 网络的三次握手四次挥手
三次握手和四次挥手是TCP 协议三次握手:用于建立可靠的 TCP 连接,确保通信双方都能正常收发数据(双向的收发能力均被验证);四次挥手:用于关闭TCP 连接,确保双方都完成数据传输,避免数据丢失。TCP 是面向连接、可靠的字节流协议,这两个机制是其 “可靠性” 和 “有序性” 的基础。
2025-12-01 19:16:27
1085
原创 Redis 与 MySQL 的核心区别
Redis 是高性能、内存优先的非关系型数据库,适合低延迟、高并发的非结构化 / 半结构化数据场景;MySQL 是强事务、磁盘优先的关系型数据库,适合结构化数据存储和复杂查询场景。两者结合是互联网业务的主流架构。
2025-12-01 18:55:13
470
原创 MySQL中正则表达式(Regex)和like的区别
- 解释:^[0-9] 数字开头, . 任意字符, [aeiou] 元音字母, .{2,} 至少2个任意字符。在实际的数据库工作中,两者都是重要的工具,根据具体需求选择合适的使用才是关键!确实可以做到,而且应该优先使用,因为它的性能可能更好。-- ... 需要写30种组合,极其繁琐!-- 使用 LIKE 几乎不可能实现。:通常无法利用索引,全表扫描,性能较差。-- 能利用索引(如果name有索引)-- 使用正则表达式 一行搞定。——对于简单的模式匹配,——适合简单的拧螺丝工作。解决的简单问题,就用。
2025-11-29 10:56:13
557
1
原创 静态链接和动态链接是什么,以及区别
简单来说,链接是编译过程的最后一个步骤,它的主要任务是将我们写的代码和需要用到的库代码“合并”在一起,形成一个可以运行的程序。想象一下:你写了一篇论文(你的代码),里面引用了很多教科书(库)里的定义和公式。链接器的工作就是把这些引用的部分找出来,然后和你自己的论文合并成一份完整的、可以独立阅读的最终稿(可执行文件)。特性静态链接动态链接发生时机编译时运行时库代码位置被复制到可执行文件内部存在于独立的库文件外部可执行文件大小大(包含所有库代码)小(只包含自身代码和依赖信息)运行时依赖无。
2025-11-24 11:32:54
922
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅