41|内功心法(二):内核和后端通用的设计思想有哪些?
LMOS
你好,我是 LMOS。
上节课,我们学习了并行化、异步化、调度思想这三种内功心法,无论是内核设计还是后端场景里,你总能找到这些“心法”的影子。看完以后是不是感觉有点意犹未尽?
这节课,我再给你分享三种设计思想,分别是池化、分层和缓存。无论是操作系统内核,还是后端当中,这三种设计思想也是通用的。这两节课属于偏抽象的架构思想,因此建议你学完之后结合自己的具体工作实践进一步理解、消化。好,让我们进入正题。
内功心法之池化
如果你是一家水果店的店长,肯定要走批发采购、平时贩卖零售的路线。要是有顾客来选购一种水果的时候,我们才去采购、运输过来实在是费事费力,太过低效。但如果我们提前采购好一批水果,顾客来购买的时候我们直接拿给顾客,这样就可以有效节约时间和运输成本。
这种降低开销的思路,在工程中也是类似的。为了提升资源(计算、存储、网络)的复用性、避免重复创建的开销,我们通常会提前统一创建一批资源,放入资源池,在使用时直接向资源池申请,使用完毕之后再归还给资源池,这样的思路我们称为池化思想。
之前讲内存管理的时候,我们提到过,为了减少内存分配或销毁时的时间开销,避免内存碎片的产生,我们会维护一个内存链表。
当编程语言申请内存的时候,OS 内核就会根据内存分配算法,在链表中查找一段可以分配的内存分配出去。等到内存需要释放的时候,不但需要进行查找、释放操作,还需要整理,这些操作都比较耗时。怎么解决这个问题呢?
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
池化、分层和缓存是计算机科学中常见的设计思想,它们在操作系统内核和后端领域中有着广泛的应用。池化思想通过提前创建一批资源,放入资源池,在需要时直接获取,使用完毕后再归还给资源池,以提高资源的复用性和避免重复创建的开销。分层设计可以有效控制系统的复杂性、简化系统设计,让不同的人专注做某一层次的事情,提高工程效率和易维护性。缓存思想则可以通过将常用数据放入读取速度更快的存储空间,提高数据读取性能,但也需要注意缓存一致性的风险。这些设计思想在工程应用中有着重要的意义,能够提升系统的性能和效率。在实际工作中,读者可以思考在自己的项目中是否有应用到这些设计思想,并权衡其利弊。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《计算机基础实战课》,新⼈⾸单¥68
《计算机基础实战课》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(3)
- 最新
- 精选
- 苏流郁宓说到底二八定律无处不在呀,总有一些代码的利用频率远高于其它代码! 把那些利用率高的代码,做成分层的接口,供其它代码调度使用!
作者回复: 对的
2022-11-06归属地:湖北2 - 青玉白露多谢lmos老师,关于后端这两节课,收获颇多
作者回复: 加油
2022-11-05归属地:湖北2 - peter请教老师两个问题: Q1:MySQL认证环节服务端是通过私有协议发送密码的吗? 文中池化部分,以MySQL为例讲解,其中一步是“服务端向客户端发送密钥”。 发送密码应该不是在TCP连接阶段。TCP连接建立以后,MySQL服务端主动发送给MySQL客户端,属于服务端和客户端之间的私有协议,开发人员感觉不到(估计也不能干预此步骤),是这样吗? Q2:Java J.U.C 中 ThreadPoolExecutor 线程池为什么不建议使用? 看到有这样的面试题“为什么阿里不建议使用Java J.U.C 中 ThreadPoolExecutor 线程池”, (没有研究,这里问一下)。请问为什么?
作者回复: Q1 是的 Q2 JUC 实现的并不是太优 可能太过通用了 不适应具体场景
2022-11-04归属地:湖北
收起评论