首页 问答 高手问答第 316 期 —— 开发者进阶之深入理解 Linux 内核底层技术原理 热
问题详情

国内大部分的开发者和公司都从事的是应用层的开发,平时大家更多关注的是应用层的开发技术。但应用层是建立在CPU和内存等硬件、操作系统内核、语言运行时的基础之上的。

如果缺乏对这些底层知识的理解,驾驭技术的能力就无法精进,也很难开发出高性能、高稳定性的应用。

本期高手问答邀请到了张彦飞老师@张彦飞allen )作为嘉宾,一起探讨 Linux 内核底层技术相关的问题。

张彦飞,著有畅销技术书《深入理解 Linux 进程和内存》和《深入理解 Linux 网络》。有十多年大型互联网公司项目经验。善于归纳总结内核等底层技术原理。他的技术文帮助很多读者提升了对底层的理解,深受广大技术爱好者好评。个人公众号「开发内功修炼」(ID:kfngxl)在全网有超过十万读者。

上周,张彦飞老师的第二本新书《深入理解Linux进程与内存》正式发布。

第二本560页新书《深入理解Linux进程与内存》今天正式发布啦!

本书主要包括CPU和内存硬件、进程创建和调度原理、虚拟内存底层机制、Go 用户态协程实现、容器cgroup资源限制,以及throttle、CPU利用率和负载等性能指标统计原理等内容,最后过渡到性能优化手段,带领大家修炼底层内功,掌握高性能原理。

此外,在 Linux 内核版本方面,本书使用的是比较新的 6.1.33 长期稳定支持版本。

购买地址:https://item.jd.com/14739950.html


为了鼓励踊跃提问,本期高手问答结束后将从提问者中抽取 3 名幸运会员赠予《深入理解Linux进程与内存》一书。

欢迎各位围绕本期主题向张彦飞老师提问,直接回帖即可。

回答

高手问答第 316 期 —— 开发者进阶之深入理解 Linux 内核底层技术原理

@开源博客 @希声2014 @风啸雪

恭喜上面三名用户获赠张彦飞老师新书《深入理解 Linux 进程与内存》,请于9月10日前私信@局 告知邮寄信息(格式:姓名+电话+地址),逾期视为自动放弃。

回复
@局 : 应该是手机号审核有问题,发不过去私信发不出去,OSC的审核让人抓不着头脑Thanks@风啸雪@希声2014

看到CPU调度原理,能否详细解释一下在高负载情况下,Linux内核是如何进行进程调度的

在高负载下还要关注一个重点就是进程的调度延迟。所谓调度延迟指的是进程进入就绪态后,到它真正获得CPU开始运行中间的时间。虽然说操作系统通过调度器的负载均衡机制一定程序上保障了调度延迟,但极端情况仍然有可能会出现调度延迟过高,进而导致业务超时SLA受损的情况出现。首先说一下,高负载有两种情况,1)是CPU高负载,2)IO高负载。我默认你指的是CPU高负载来料。 CPU高负载的情况下,进程对CPU的需求量大。这时候任务在选择核的时候,上一次使用的核被占用的概率变高,会更多地出发核间迁移。细节可以看《深入理解Linux进程与内存》中的7.4小节中的负载均衡相关介绍。

@张彦飞allen飞哥您好,最近一直再看您linux网络相关的文章,一直有个疑虑,如今辅助编程越来越成熟的趋势下,继续投入linux 内核这种纯底层的领域积累有多大的必要性呢?针对当前llm+cuda为核心提供的产品交互生态和传统ui+linux为核心提供的产品交互生态,能说说您的一些想法吗?

回复
@张彦飞allen : 谢飞哥,最近一直研究并发编程与io编程在linux内核的执行细节,之前一直在java提供的抽象上理解,总是感觉学不会,理解不了,但看到您公众号相关的博文以后,豁然开朗,真是后悔没早点关注飞哥,真是损失大了,哈哈进入大模型时代以后,linux仍然具备旺盛的生命力。原因是上层应用仍然得依赖linux来对GPU、显存资源进行调度和管理。其中的一些实现细节比如GPU的任务调度和上下文切换、GPU的隔离、显存的申请和释放、显存的共享内存机制,这些底层的原理仍然是和管理CPU+RAM是相通的。现在应用程序的底层越来越完善了,确实替开发者减少了很多工作量,提高了编程效率。但是假如底层技术是一台汽车,那么我们应该做一个深谙各个组件性能的赛车手,而不是一个熟练的出租车司机。一名优秀的赛车手一定是对发动机、制动系统、甚至是空气动力学都有足够深入的理解才能做到顶级。不理解底层技术无法精进,慢慢只会沦落为一名熟练的工人而已。

请问Linux中做并发编程的话,能否在较高层次概括一下一些通用的原则

3)减少锁竞争带来的额外开销:多线程竞争资源时的锁开销也是一个大问题。redis为了避免锁开销甚至都用单线程,即使是6.0以后的多线程版本,也只是io线程多线程了而已我理解你说的并发编程应该主要指的是多线程编程。我给提几个建议吧 1)线程合理分工:哪些线程负责数据收发,哪些线程负责业务逻辑处理,要合理分工。 2)避免过多的上下文切换:并发可以充分利用多核优势,但也是由代价的,上下文切换开销就是一个。尽量在并发时要减少切换。

@张彦飞allen 这种操作系统内核等底层技术原理是不是学起来很枯燥?

我主要解决的就是枯燥的问题。之前为什么学底层枯燥,原因是一堆一堆的操作系统理论的书籍,并没有和工程实践结合起来。单纯地学理论是很没意思。而我主要是从编程角度出发,然后带着实际问题去找底层运行原理的,最后再上升到应用层提供性能优化思路。都是围绕实践来的,趣味无穷。

@张彦飞allen 我有奇怪了 为啥 没C# ?怎么能缺少这么优秀语言呢?

版权:言论仅代表个人观点,不代表官方立场。转载请注明出处:https://www.stntk.com/question/1102.html

发表评论
暂无评论

还没有评论呢,快来抢沙发~

点击联系客服

在线时间:8:00-16:00

客服QQ

70068002

客服电话

400-888-8888

客服邮箱

70068002@qq.com

扫描二维码

关注微信公众号

扫描二维码

手机访问本站