开发内功修炼

其他

把个人电脑上的 CPU 拔下来插到服务器上行不行?

硬件模块不一样在个人电脑中,为了支持图形图像显示,是内置了显卡模块的。就是大家平时所说的集成显卡。如下图是
2月21日 上午 9:01
其他

聊聊跨进程共享内存的内部工作原理

指针取出来,然后再在当前进程下为其申请一个新的文件句柄。这个文件句柄返回给用户进程后,用户进程就可以用它来和另外一个进程共享地访问同一块内存了。总体来看,共享内存本质上共享的是内核对象
2023年12月7日
其他

人人都应该知道的CPU缓存运行效率

大家好,我是飞哥!提到CPU性能,大部分同学想到的都是CPU利用率,这个指标确实应该首先被关注。但是除了利用率之外,还有很容易被人忽视的指标,就是指令的运行效率。如果运行效率不高,那CPU利用率再忙也都是瞎忙,产出并不高。这就好比人,每天都是很忙,但其实每天的效率并不一样。有的时候一天干了很多事情,但有的时候只是瞎忙了一天,回头一看,啥也没干!一、CPU
2023年5月9日
其他

内核是如何给容器中的进程分配CPU资源的?

有还有比较长时间(通常大于7ms)才超时的场景。这个时候我们就可以激活比较短的slack_timer(5ms超时)进行throttle,这样的设计可以提升系统的实时性。这两个
2023年3月14日
其他

从进程栈内存底层原理到Segmentation fault报错

命令来查看,也同样可以使用该命令修改。至于开篇的问题3,当堆栈发生溢出后应用程序会发生什么?写个简单的无限递归调用就知道了,估计你也遇到过。报错结果就是'Segmentation
2023年2月7日
其他

Linux 中的负载高低和 CPU 开销并不完全对应

系统的主观速度。而且,最重要的是,当没有人做任何事情时,负载仍然为零。;-)”这一补丁提交者的主要思想是平均负载应该表现对系统所有资源的需求情况,而不应该只表现对
2023年1月10日
其他

没想到硬件能做这么多有意思的事情

大家好,我是飞哥!我和绝大多数同学一样,上学和工作基本都以软件为主,对硬件并不太懂。但最近了解后才发现硬件的世界真的也很精彩。现在互联网公司也都开始重视硬件能力了。例如其中现在的一个发展方向就是用硬件来卸载本来属于
2022年11月29日
其他

你的新进程是如何被内核调度执行到的?

的目的。但是在数据结构的组织上,有一个小小的难点要解决。那就是当所有程序运行起来后,每一个进程的虚拟时间是不断地在变化的。如何动态管理这些虚拟时间不断在变化的进程,快速把虚拟时间最少的进程找出来。在
2022年11月17日
其他

从 Linux 内核角度探秘 JDK NIO 文件读写本质

配置文件来对这些参数进行修改。这里我们先主要关注这些内核参数的含义以及源码实现,文章后面笔者有一个专门的章节来介绍这些内核参数各种不同的配置方式。dirty_writeback_centisecs
2022年11月13日
其他

看到源码就觉得恐惧,这是一种病,得治!

的话,无论是做最基础的跟踪观测也好,还是进阶的网络行为修改,都有要求使用者理解内核的源码主体逻辑。如果不具备起码的内核源码掌控能力,那么对于这种强有力的技术基本无法驾驭。例如
2022年11月10日
其他

简单聊聊从 nginx 到 kong 的进化

高性能网络工作原理!这篇文章。性能上的问题是解决了,但是现在随着微服务的发展,服务被拆的非常零散,降低了耦合度的同时也给服务的统一管理增加了难度。例如服务发现。在
2022年11月1日
其他

聊聊Linux中线程和进程的联系与区别!

...}这个数据结构已经在上一篇文章《Linux进程是如何创建出来的?》中,我们详细介绍过了。对于线程来讲,所有的字段都是和进程一样的(本来就是一个结构体来表示的)。包括状态、pid、task
2022年10月12日
其他

Linux进程是如何创建出来的?

中,进程是我们非常熟悉的东东了,哪怕是只写过一天代码的人也都用过它。但是你确定它不是你最熟悉的陌生人?我们今天通过深度剖析进程的创建过程,帮助你提高对进程的理解深度。在这篇文章中,我会用
2022年9月29日
自由知乎 自由微博
其他

读者福利,送6本新书《计算机系统开发与优化实战》

大家好,我是飞哥!前几天我的一位朋友Peter联合了几位在芯片、存储、内核等方向工作了十多年的资深人士合伙写了一本新书,名字叫做《计算机系统开发与优化实战》。这本书写的都是底层相关的技术,咱们的读者应该会感兴趣。所以我给咱们「开发内功修炼」的读者要了
2022年9月24日
其他

记一次网络相关的技术问题答疑

有没有推荐网络调优和监控的工具。答:网络比较复杂,最好先了解它内部的工作原理,看一下《深入理解Linux网络》,然后再找相应步骤的工具,可以看看《性能之巅》,这样更好一些。问题10:net.ipv4
2022年9月21日
其他

飞哥离职了!

,还是技术上。后面之所以一直没走,原因很多,其中一个最重要的原因是我又开辟出了写公众号,写书这一技术成长新途径。在搜狗工作时下班时间相对比较早,基本晚上
2022年9月6日
其他

容器进程调度时是该优先考虑CPU资源还是内存资源?

Server接受客户端提交Pod对象创建请求后的操作过程中,有一个重要的步骤就是由调度器程序kube-scheduler从当前集群中选择一个可用的最佳节点来接收并运行它。当然实际中
2022年7月27日
其他

为大家献上《深入理解Linux网络》全书知识图谱!

大家好,我是飞哥!咱们的《深入理解Linux网络》上市短短一个月,就收获了非常多的好数据。为了能让这么多读者更好地吸收和掌握书中的知识,我做了个全书的知识图谱,今天送给大家!我把书中的每一个章节都重新过了一遍,然后把其中的核心知识点提取了出来。最后汇总成了一张知识图谱。整本书的内容精华就全在这里了。请长按图片下载,如果不够清晰的话,在咱们公众号后台回复「思维导图」获取图片的高清版本。分享完了思维导图,给大家汇报一下咱们这本《深入理解Linux网络》所取得的一些数据。咱们书在图书开卷权威数据榜单上,位于6月计算机新书第一名。在豆瓣上也获得了9.1分的高分。在京东当当上的数据也非常的不错。能有这么好的数据全得感谢大家的支持。接下来也还辛苦大家继续到京东、当当、豆瓣上继续把你的好评分享给大家!后面如果还有需要购书的同学,点下面这个读者专属5折链接就行。
2022年7月22日
其他

剖析Netty内部网络实现原理

只传入了一个线程池,那么将来本服务下的所有事件都由这个线程池来处理。详情查看飞哥精简后的源码。//file:io/netty/bootstrap/ServerBootstrap.javapublic
2022年7月14日
其他

在开发内功修炼的学习,助我拿到了华为等大厂 offer

offer。听到这个消息后我是非常的开心。本来最早我对这个公众号的定位是帮助有几年工作经验的人更深入地理解性能。对于应届生来说,咱们的文章难度属实有点高。但最近这几位的同学成功斩获
2022年7月4日
其他

tcp的传输过程是可靠的,那为什么许多较大的下载最终还要校验文件完整性?

大家好,我是飞哥!前几天我在知乎上回答过一个问题,这个问题问的比较有意思。我回答了一下,收获的赞还不少,所以今天分享给大伙儿。虽然是tcp的传输过程是可靠的,但确实在大文件下载的时候还是应该校验一下的。飞哥总结的原因有如下几个:1)TCP
2022年6月6日
其他

Redis 6 中的多线程是如何实现的!?

中开启对读任务队列和写任务队列的处理。总体工作过程如下图所示。在这个处理过程中,对读任务队列和写任务队列的处理都是多线程并行进行的(前提是开篇我们开启了多
2022年5月24日
其他

深度解析单线程的 Redis 如何做到每秒数万 QPS 的超高处理能力!

大家好,我是飞哥!今天开篇先给大家讲个飞哥自己的小故事。我在学校和刚毕业头一年主要从事的客户端开发,那时候对服务器端编程还不擅长。有一次去面试服务器端岗位,面试官问我有一个连接过来,你该怎么编程处理它。我答道:“主线程收到请求后,创建一个子线程处理。”
2022年5月10日
其他

选择大于努力,错失字节跳动数亿身价换来的人生经验!

大家好,我是飞哥!好久没写水文了,今天写一篇来拉一拉大家的活跃度。我想大家都对赚钱感兴趣,我今天就自曝一件我自己在赚钱上相关的事。工作的这十多年来,我有过很多的人生感悟。其中感受最为深刻一条就是选择大于努力。这十多年来,每一次十字路口的选择都对我的人生都产生着重大的影响。我的选择中有过不少成功的,也有过失败。成功的是比如刚工作一年多的时候就预判了互联网必然大有发展空间,毅然婉拒了原公司的升职加薪,从广电领域跳到了腾讯,进而造就了今天的我。也有过失败,比如八年前的一次选择失误,错失字节的
2022年4月19日
其他

万字多图,搞懂 Nginx 高性能网络工作原理!

采用的是一种模块化的架构,它的模块包括核心模块、标准HTTP模块、可选HTTP模块、邮件服务模块和第三方模块等几大类。每一个模块都以一个
2022年4月11日
其他

小小的 likely 背后却大有玄机!

在执行程序指令的时候,并不是先执行一个,执行完了再运行下一个这样的。而是把每个指令都分成了多个阶段,并让不同指令的各步操作重叠,从而实现几条指令并行处理。还拿上面编译出来的汇编码来举例,程序中
2022年3月30日
其他

在 golang 中是如何对 epoll 进行封装的?

对象所管理的文件描述符中哪一个有事件就绪需要被处理了。如果有,就唤醒对应的协程来进行执行。其实除此之外还有几个地方会唤醒协程,如startTheWorldWithSemafindrunnable
2022年3月21日
其他

明明还有大量内存,为啥报错“无法分配内存”?

1256。那么该进程在内核中的对象大概是如下这个样子。二、新版本是否有所改观接下来,我首先想到的可能是因为咱们用的内核版本太旧了。(熟悉飞哥的读者都知道,我用的内核版本是
2022年3月7日
其他

深入理解Linux端口重用这一特性

是为了解决什么问题而产生的。如果有多个进程复用同一个端口,当用户请求到达时内核是如何选一个进程进行响应的。学习完本文,你将深刻掌握这一提升服务器端性能的利器!一、
2022年2月14日
其他

绑定特殊 IP 之 0.0.0.0 的内部工作原理

表中,了解就行了。接下来咱们看当用户握手包到达的时候的处理过程。二、响应握手请求在收到来自客户端数据包的时候(包括握手请求),会进入到
2022年1月24日
其他

天天讲路由,那 Linux 路由到底咋实现的!?

就又承担起路由器的角色,实现容器数据包的正确转发和投递。在各种基于容器的云原生技术盛行的今天,再次回头深刻理解路由工作原理显得非常有必要,而且也非常的有价值。今天,我们就再来强化一下
2022年1月13日
其他

这种本机网络 IO 方法,性能可以翻倍!

倍的关系了,是因为当包足够大的时候,网络协议栈上的开销就显得没那么明显了。再来看看吞吐效果对比。在小包的情况下,带宽指标可以达到
2021年12月21日
其他

来,今天飞哥带你理解 iptables 原理!

/proc/net/ip_conntrack但在高流量的情况下,可能会有连接跟踪记录满的问题发生。我就遇到过一次在测试单机百万并发连接的时候,发生因连接数超过了
2021年12月7日
其他

手工模拟实现 Docker 容器网络!

大家好,我是飞哥!如今服务器虚拟化技术已经发展到了深水区。现在业界已经有很多公司都迁移到容器上了。我们的开发写出来的代码大概率是要运行在容器上的。因此深刻理解容器网络的工作原理非常的重要。只有这样将来遇到问题的时候才知道该如何下手处理。网络虚拟化,其实用一句话来概括就是用软件来模拟实现真实的物理网络连接。比如
2021年11月16日
其他

Linux文件系统十问

存取时间。对于旋转延时,现在主流服务器上经常使用的是1W转/分钟的磁盘,每旋转一周所需的时间为60*1000/10000=6ms,故其旋转延迟为(0-6ms)。对于存取时间,一般耗时较短,为零点几
2021年11月1日
其他

动手实验+源码分析,彻底弄懂 Linux 网络命名空间

上记录了其归属的网络命名空间。需要查找路由表之前先找到该命名空间,再找到命名空间里的路由表,然后再开始执行查找。这样,各个命名空间中的路由过程就都隔离开了。我们来看详细的路由查找源码。在25
2021年10月25日
其他

聊聊 Linux 上软件实现的“交换机” - Bridge!

设备!》。不过在实际中,我们会想在一台物理机上我们虚拟出来几个、甚至几十个容器,以求得充分压榨物理机的硬件资源。但这样带来的问题是大量的容器之间的网络互联。很明显上面简单的
2021年10月14日
其他

一次限制进程的 CPU 用量的实操过程

耗时开销。不过不巧的是我们发现这个货在并发上做的并不是特别好,运行的前半段里只能打满一个核,而后半段可以把整台机器上所有
2021年9月24日
其他

轻松理解 Docker 网络虚拟化基础之 veth 设备!

网络实现过程理解的还算不错了。但在看网络虚拟化相关的技术的时候,还是觉得不是很容易。不过,飞哥有绝招,那就是先挑个软柿子来捏。这不,今天我给大家带来的就是
2021年9月16日
其他

如何正确查看线上半/全连接队列溢出情况?

状态的连接数量达到你算出来的队列长度了,那么可以确定是有半连接队列溢出了。如果想加大半连接队列的长度,方法我们在上面文章里也一并讲过了。三、总结最后,总结一下。对于全连接队列来说,使用
2021年8月23日
其他

深入解析常见三次握手异常

三次握手,工程实践中可能会有各种意外发生。如果对握手理解不深,那么很有可能无法处理线上出现的各种故障。今天的文章主要是描述了端口不足、半连接队列满、全连接队列满时的情况,当端口不充足的时候,会导致
2021年8月9日
其他

能将三次握手理解到这个深度,面试官拍案叫绝!

状态的流转。还包含了端口选择,连接队列创建与处理等很多关键技术点。通过今天一篇文章,我们深度去了解了三次握手过程中内核中的这些内部操作。全文洋洋洒洒上万字字,其实可以用一幅图总结起来。1.
2021年7月22日
其他

为什么服务端程序都需要先 listen 一下?

这三个参数。网上任何告诉你修改某一个参数就能提高半连接队列长度的文章都是错的。所以,不放过一个细节,你可能会有意想不到的收获!最后,求再看和转发,谢谢大家!
2021年7月7日
其他

TCP连接中客户端的端口号是如何确定的?

0,该端口仍然可以接着使用!。这里可能会让很多同学困惑了,一个端口怎么可以被用多次呢?回忆下四元组的概念,两对儿四元组中只要任意一个元素不同,都算是两条不同的连接。以下的两条
2021年6月17日
其他

127.0.0.1 之本机网络通信过程知多少 ?!

需要经过网卡吗?通过本文的叙述,我们确定地得出结论,不需要经过网卡。即使了把网卡拔了本机网络是否还可以正常使用的。2)数据包在内核中是个什么走向,和外网发送相比流程上有啥差别?总的来说,本机网络
2021年5月27日
其他

25 张图,一万字,拆解 Linux 网络包发送过程

是发送数据位于传输层的最后一步,接下来就可以进入到网络层进行下一层的操作了。调用了网络层提供的发送接口icsk->icsk_af_ops->queue_xmit()。在下面的这个源码中,我们的知道了
2021年5月12日
其他

漫画 | 看进程小 P 讲述它的网络性能故事!

“终于有啦”干这事可特么把我累坏个屁的了,运气不好的时候我得访问成千上万次才能等到数据真正到来!03终于!!!后来操作系统老大在内核态搞出了各种支持多路复用的新系统调用,它们是
2021年4月22日
其他

read 文件一个字节实际会发生多大的磁盘IO?

大家好,我是飞哥!在日常开发中一些看似司空见惯的问题上,我觉得可能大多数人其实并没有真正理解,或者理解的不够透彻。不信我们来看以下一段简单的读取文件的代码:上图中的代码仅仅只是对某个文件读取了一个字节,基于这个代码片段我们来思考:1、读取文件
2021年4月14日
其他

答读者问,飞哥能否给推荐几本硬核技术书?

点击上方蓝字"开发内功修炼",关注并设为星标了解你的每一比特,用好你的每一纳秒经常收到后台读者发过来同样的问题,看完「开发内功修炼」以后觉得写的不错,问可否帮推荐几本书更系统地学习一下。经典计算机图书的价值非常巨大,比普通的书的质量要好百倍。所以要看就要看经典,否则会浪费很多时间。其中很多好书不单单是要看一遍,而且在工作中遇到问题的时候随时要拿出来查。我以前就一直推荐大家最好是拥有纸质版,因为当你想去查的时候,纸质的要比电子的更容易定位。正好今天天时地利都具备了,当当网在搞自营图书每满
2021年3月23日
其他

图解 | 深入理解高性能网络开发路上的绊脚石 - 同步阻塞网络 IO

相关的内核对象(是的,不是只有一个)。它们互相之间的关系如图。当然了,这个对象比图示的还要更复杂。我只在图中把和今天的主题相关的内容展现了出来。
2021年3月10日