<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[~~ LINUX ~~]]></title><description><![CDATA[~~ LINUX ~~]]></description><link>https://blog.csdn.net/armlinuxww</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; armlinuxww]]></copyright><item><title><![CDATA[如何阅读 Redis 源码？]]></title><link>https://blog.csdn.net/armlinuxww/article/details/120173660</link><guid>https://blog.csdn.net/armlinuxww/article/details/120173660</guid><author>armlinuxww</author><pubDate>Wed, 08 Sep 2021 10:08:59 +0800</pubDate><description><![CDATA[在这篇文章中， 我将向大家介绍一种我认为比较合理的 Redis 源码阅读顺序， 希望可以给对 Redis 有兴趣并打算阅读 Redis 源码的朋友带来一点帮助。

第 1 步：阅读数据结构实现

刚开始阅读 Redis 源码的时候， 最好从数据结构的相关文件开始读起， 因为这些文件和 Redis 中的其他部分耦合最少， 并且这些文件所实现的数据结构在大部分算法书上都可以了解到， 所以从这些文件开始读是最轻松的、难度也是最低的。

下表列出了 Redis 源码中， 各个数据结构的实现文件：


			文件
	]]></description><category></category></item><item><title><![CDATA[REDIS 源码阅读]]></title><link>https://blog.csdn.net/armlinuxww/article/details/120173074</link><guid>https://blog.csdn.net/armlinuxww/article/details/120173074</guid><author>armlinuxww</author><pubDate>Wed, 08 Sep 2021 09:52:09 +0800</pubDate><description><![CDATA[https://redissrc.readthedocs.io/en/latest/datastruct/dict.html
]]></description><category></category></item><item><title><![CDATA[Redis最佳实践：7个维度+43条使用规范，带你彻底玩转Redis | 附实践清单]]></title><link>https://blog.csdn.net/armlinuxww/article/details/120172991</link><guid>https://blog.csdn.net/armlinuxww/article/details/120172991</guid><author>armlinuxww</author><pubDate>Wed, 08 Sep 2021 09:49:12 +0800</pubDate><description><![CDATA[大家好，我是 Kaito。

这篇文章我想和你聊一聊 Redis 的最佳实践。

你的项目或许已经使用 Redis 很长时间了，但在使用过程中，你可能还会或多或少地遇到以下问题：


	我的 Redis 内存为什么增长这么快？
	
	
	为什么我的 Redis 操作延迟变大了？
	
	
	如何降低 Redis 故障发生的频率？
	
	
	日常运维 Redis 需要注意什么？
	
	
	部署 Redis 时，如何做好资源规划？
	
	
	Redis 监控重点要关注哪些指标？
	
尤其是当你的项目越来越依赖 R]]></description><category></category></item><item><title><![CDATA[Redis，唯快不破！]]></title><link>https://blog.csdn.net/armlinuxww/article/details/120171645</link><guid>https://blog.csdn.net/armlinuxww/article/details/120171645</guid><author>armlinuxww</author><pubDate>Wed, 08 Sep 2021 09:04:17 +0800</pubDate><description><![CDATA[我们都知道Redis很快，可达到 10万QPS。可 Redis为什么会这么快呢？这篇文章将带大家一探究竟。



1. 基于内存的实现

众所周知「内存读写」比「磁盘读写」快很多。Redis是基于内存存储实现的数据库，相对于数据存在磁盘中的数据库，就省去了磁盘I/O的消耗。

此外，MySQL等磁盘数据库通常建立索引来加快查询效率，而Redis 的数据存放在内存中，可直接操作内存，所以很快。



2. 高效的数据结构

我们知道，MySQL索引为了提高效率，选择了B+树的数据结构。其实合理的...]]></description><category></category></item><item><title><![CDATA[华为的手册和官网视频，学习网络基础]]></title><link>https://blog.csdn.net/armlinuxww/article/details/120144516</link><guid>https://blog.csdn.net/armlinuxww/article/details/120144516</guid><author>armlinuxww</author><pubDate>Mon, 06 Sep 2021 20:51:44 +0800</pubDate><description><![CDATA[https://support.huawei.com/hedex/hdx.do?docid=EDOC1100196171&amp;lang=zh&amp;idPath=24030814%7C9856750%7C22715517%7C9858933%7C15837



https://support.huawei.com/enterprise/zh/doc/EDOC1100196835?idPath=24030814%7C24030874%7C24031380%7C22318840%7C15833




]]></description><category></category></item><item><title><![CDATA[结合中断分析TCP/IP协议栈在LINUX内核中的运行时序]]></title><link>https://blog.csdn.net/armlinuxww/article/details/120053972</link><guid>https://blog.csdn.net/armlinuxww/article/details/120053972</guid><author>armlinuxww</author><pubDate>Thu, 02 Sep 2021 09:31:49 +0800</pubDate><description><![CDATA[目录：




1.Linux网络子系统的分层

2.TCP/IP分层模型

3.Linux网络协议栈

4.Linux网卡收包时的中断处理问题

5.Linux网络启动的准备工作

6.Linux网络包：中断到网络层接收

7.总结

Linux网络子系统的分层

Linux网络子系统实现需要：

l 支持不同的协议族 ( INET, INET6, UNIX, NETLINK...)

l 支持不同的网络设备

l 支持统一的BSD socket API

需要屏蔽协议、硬件、平台(API)的...]]></description><category></category></item><item><title><![CDATA[25 张图，一万字，拆解 Linux 网络包发送过程]]></title><link>https://blog.csdn.net/armlinuxww/article/details/119607176</link><guid>https://blog.csdn.net/armlinuxww/article/details/119607176</guid><author>armlinuxww</author><pubDate>Wed, 11 Aug 2021 15:01:38 +0800</pubDate><description><![CDATA[半年前我以源码的方式描述了网络包的接收过程。之后不断有粉丝提醒我还没聊发送过程呢。好，安排！

在开始今天的文章之前，我先来请大家思考几个小问题。


	问1：我们在查看内核发送数据消耗的 CPU 时，是应该看 sy 还是 si ？
	
	
	问2：为什么你服务器上的 /proc/softirqs 里 NET_RX 要比 NET_TX 大的多的多？
	
	
	问3：发送网络数据的时候都涉及到哪些内存拷贝操作？
	
这些问题虽然在线上经常看到，但我们似乎很少去深究。如果真的能透彻地把这些问题理解到位，我们对性]]></description><category></category></item><item><title><![CDATA[read 文件一个字节实际会发生多大的磁盘IO？]]></title><link>https://blog.csdn.net/armlinuxww/article/details/119606708</link><guid>https://blog.csdn.net/armlinuxww/article/details/119606708</guid><author>armlinuxww</author><pubDate>Wed, 11 Aug 2021 14:46:27 +0800</pubDate><description><![CDATA[在日常开发中一些看似司空见惯的问题上，我觉得可能大多数人其实并没有真正理解，或者理解的不够透彻。不信我们来看以下一段简单的读取文件的代码：



上图中的代码仅仅只是对某个文件读取了一个字节，基于这个代码片段我们来思考：


	1、读取文件 1 个字节是否会导致磁盘 IO ？
	
	
	2、如果发生了磁盘 IO，那发生的是多大的 IO 呢？
	
大家平时用的各种语言 C++、PHP、Java、Go 啥的封装层次都比较高，把很多细节都给屏蔽的比较彻底。如果想把上面的问题搞清楚，需要剖开 Linux 的内部来看]]></description><category></category></item><item><title><![CDATA[图解Linux网络包接收过程]]></title><link>https://blog.csdn.net/armlinuxww/article/details/119605367</link><guid>https://blog.csdn.net/armlinuxww/article/details/119605367</guid><author>armlinuxww</author><pubDate>Wed, 11 Aug 2021 14:04:46 +0800</pubDate><description><![CDATA[因为要对百万、千万、甚至是过亿的用户提供各种网络服务，所以在一线互联网企业里面试和晋升后端开发同学的其中一个重点要求就是要能支撑高并发，要理解性能开销，会进行性能优化。而很多时候，如果你对Linux底层的理解不深的话，遇到很多线上性能瓶颈你会觉得狗拿刺猬，无从下手。

我们今天用图解的方式，来深度理解一下在Linux下网络包的接收过程。还是按照惯例来借用一段最简单的代码开始思考。为了简单起见，我们用udp来举例，如下：


int main(){
  int serverSocketFd = socke..]]></description><category></category></item><item><title><![CDATA[图解 | 深入揭秘 epoll 是如何实现 IO 多路复用的！]]></title><link>https://blog.csdn.net/armlinuxww/article/details/119603605</link><guid>https://blog.csdn.net/armlinuxww/article/details/119603605</guid><author>armlinuxww</author><pubDate>Wed, 11 Aug 2021 13:09:46 +0800</pubDate><description><![CDATA[进程在 Linux 上是一个开销不小的家伙，先不说创建，光是上下文切换一次就得几个微秒。所以为了高效地对海量用户提供服务，必须要让一个进程能同时处理很多个 tcp 连接才行。现在假设一个进程保持了 10000 条连接，那么如何发现哪条连接上有数据可读了、哪条连接可写了 ？

我们当然可以采用循环遍历的方式来发现 IO 事件，但这种方式太低级了。我们希望有一种更高效的机制，在很多连接中的某条上有 IO 事件发生的时候直接快速把它找出来。其实这个事情 Linux 操作系统已经替我们都做好了，它就是我们所熟知的.]]></description><category></category></item><item><title><![CDATA[存储基础 — 文件描述符 fd 究竟是什么？]]></title><link>https://blog.csdn.net/armlinuxww/article/details/119600762</link><guid>https://blog.csdn.net/armlinuxww/article/details/119600762</guid><author>armlinuxww</author><pubDate>Wed, 11 Aug 2021 11:38:30 +0800</pubDate><description><![CDATA[前情概要





通过上篇Go 存储基础 — 文件 IO 的姿势， 我们看到有两种文件读写的方式，一种是系统调用的方式，操作的对象是一个整数 fd，另一种是 Go 标准库自己封装的标准库 IO ，操作对象是 Go 封装的file结构体，但其内部还是针对整数 fd 的操作。所以一切的本源是通过 fd 来操作的，那么，这个 fd 究竟是什么？就这个点我们深入剖析。





fd 是什么？





fd是File descriptor的缩写，中文名叫做：文件描述符。文件描述符是一个非...]]></description><category></category></item><item><title><![CDATA[NAT框架]]></title><link>https://blog.csdn.net/armlinuxww/article/details/119598376</link><guid>https://blog.csdn.net/armlinuxww/article/details/119598376</guid><author>armlinuxww</author><pubDate>Wed, 11 Aug 2021 11:00:53 +0800</pubDate><description><![CDATA[随着Internet的发展和网络应用的增多，IPv4地址枯竭已成为制约网络发展的瓶颈。尽管IPv6可以从根本上解决IPv4地址空间不足问题，但目前网络设备和网络应用大多是基于IPv4的，因此在IPv6广泛应用之前，一些过渡技术的使用是解决这个问题最主要的技术手段。

作为一种过渡方案，NAT通过地址重用的方法来满足IP地址的需要，可以在一定程度上缓解IPv4地址空间枯竭的压力，从而保证IPv4的用户和业务能平稳过渡到IPv6。

NAT（Network Address Translation）是一种IP..]]></description><category></category></item><item><title><![CDATA[深入理解Linux socket]]></title><link>https://blog.csdn.net/armlinuxww/article/details/119598240</link><guid>https://blog.csdn.net/armlinuxww/article/details/119598240</guid><author>armlinuxww</author><pubDate>Wed, 11 Aug 2021 10:48:17 +0800</pubDate><description><![CDATA[socket fd 长什么样子？





什么是 socket fd ？粗糙的来讲，就是网络 fd，比如我们最常见的 C/S 客户端服务端的编程模式，就是网络通信的一种方式。撇开底层和协议细节，网络通信和文件读写从接口上有本质区别吗？

其实没啥区别，不就是读过来和写过去嘛，简称 IO 。

我们先看一下 socket fd 是什么样子的？随便找了个进程


root@ubuntu:~#ll/proc/1583/fd
total0
lrwx------1rootroot64...]]></description><category></category></item><item><title><![CDATA[理解Linux高性能网络架构的那些事]]></title><link>https://blog.csdn.net/armlinuxww/article/details/119298829</link><guid>https://blog.csdn.net/armlinuxww/article/details/119298829</guid><author>armlinuxww</author><pubDate>Sun, 01 Aug 2021 15:38:29 +0800</pubDate><description><![CDATA[通过本文你将会了解到以下内容：


	IO事件和IO复用
	
	
	线程模型和事件驱动模型的架构
	
	
	基于事件驱动的Reactor模式详解
	
	
	同步IO和异步IO简介
	
1. IO事件和IO复用

1.1 什么是IO事件

IO指的是输入Input/输出Output，但是从汉语角度来说，出和入是相对的，所以我们需要个参照物。

这里我们的参照物选择为程序运行时的主存储空间，外部通常包括网卡、磁盘等。

有了上述的设定理解起来就方便多了，我们来一起看下：


IO的本质是数据的流动，数据可以从网]]></description><category></category></item><item><title><![CDATA[TCP/IP拥塞控制总结...]]></title><link>https://blog.csdn.net/armlinuxww/article/details/119297215</link><guid>https://blog.csdn.net/armlinuxww/article/details/119297215</guid><author>armlinuxww</author><pubDate>Sun, 01 Aug 2021 13:25:34 +0800</pubDate><description><![CDATA[一.先唠唠嗑

按照计划，今天该出分布式一致性系列的第四篇-Paxos算法，但是又鸽了。

Paxos这个算法要很好地表达写出来并不容易，所以到现在还没有完成，于是就有了这篇组装的带有丝丝标题党感觉的干货文章，全小区最强TCP/IP总结...逃...

在正式开始文章技术点之前，想先聊一下我对面试中的TCP/IP问题的一些拙见，希望对盆友们有所帮助。

在招聘岗位描述中，几乎必然有一条熟悉、掌握、精通TCP/IP协议、Http协议、网络编程技术。

对于我们求职者来说，肯定知道的越多越好，但是就像过日子一样]]></description><category></category></item><item><title><![CDATA[CPU使用率到100%了？]]></title><link>https://blog.csdn.net/armlinuxww/article/details/118692071</link><guid>https://blog.csdn.net/armlinuxww/article/details/118692071</guid><author>armlinuxww</author><pubDate>Tue, 13 Jul 2021 09:11:45 +0800</pubDate><description><![CDATA[以下文章来源于涛歌依旧，作者点击关注????????

最近，一位同事急匆匆跑过来跟我说：糟糕了，服务器CPU的使用率达100%了。

我心想不可能啊，CPU有那么多核，怎会跑满？于是看了一眼，结果虚惊一场。

这位同事看到的100%，并非指整个CPU使用率到了100%，而是指CPU某些核的使用率到了100%.

趁此机会，我来聊聊与CPU相关的概念，对很多软件开发和运维人员来说，这些概念是必须要掌握的：


	CPU主频
	
	
	多个CPU
	
	
	多核CPU
	
	
	逻辑核(超线程)
	
	
	大]]></description><category></category></item><item><title><![CDATA[FUSE简介]]></title><link>https://blog.csdn.net/armlinuxww/article/details/117995254</link><guid>https://blog.csdn.net/armlinuxww/article/details/117995254</guid><author>armlinuxww</author><pubDate>Thu, 17 Jun 2021 15:46:25 +0800</pubDate><description><![CDATA[一、FUSE简介

 FUSE（用户空间文件系统）是这样一个框架：它使得FUSE用户在用户态下编写文件系统成为可能，而不必和内核打交道。

 FUSE由三个部分组成：linux内核模块、FUSE库 以及mount 工具。

 用户关心的只是FUSE库和mount工具，内核模块仅仅提供kernel的接入口，给了文件系统一个框架，而文件系统本身的主要实现代示位于用户空间中。FUSE库给用户提供了编程的接口，而mount工具则用于挂在用户编写的文件系统。

 FUSE起初是为了研究AVFS...]]></description><category></category></item><item><title><![CDATA[好网站，可以看各种数据结构的动态]]></title><link>https://blog.csdn.net/armlinuxww/article/details/117985725</link><guid>https://blog.csdn.net/armlinuxww/article/details/117985725</guid><author>armlinuxww</author><pubDate>Thu, 17 Jun 2021 11:03:19 +0800</pubDate><description><![CDATA[https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
]]></description><category></category></item><item><title><![CDATA[FUSE文件系统]]></title><link>https://blog.csdn.net/armlinuxww/article/details/117985340</link><guid>https://blog.csdn.net/armlinuxww/article/details/117985340</guid><author>armlinuxww</author><pubDate>Thu, 17 Jun 2021 10:56:12 +0800</pubDate><description><![CDATA[Fuse(filesystem in userspace),是一个用户空间的文件系统。通过fuse内核模块的支持，开发者只需要根据fuse提供的接口实现具体的文件操作就可以实现一个文件系统。由于其主要实现代码位于用户空间中，而不需要重新编译内核，这给开发者带来了众多便利。Google在Android 11上，为了实现scoped storage，也引入了fuse。下面我们从Fuse的架构设计以及具体的实现细节来谈一谈fuse文件系统。

一、Fuse架构设计


...]]></description><category></category></item><item><title><![CDATA[红黑树原理浅谈(附Linux内核源码注释)]]></title><link>https://blog.csdn.net/armlinuxww/article/details/117772671</link><guid>https://blog.csdn.net/armlinuxww/article/details/117772671</guid><author>armlinuxww</author><pubDate>Thu, 10 Jun 2021 11:15:55 +0800</pubDate><description><![CDATA[引言：红黑树（英语：Red–black tree）是一种自平衡二叉查找树，是在计算机科学中用到的一种数据结构，典型的用途是实现关联数组。它是在1972年由鲁道夫·贝尔发明的，他称之为"对称二叉B树"，它现代的名字是在Leo J. Guibas和Robert Sedgewick于1978年写的一篇论文中获得的。它是复杂的，但它的操作有着良好的最坏情况运行时间，并且在实践中是高效的：它可以在 O(log n) 时间内做查找，插入和删除，这里的n是树中元素的数目。——摘自维基百科
红黑树的性质：
红黑树是每个节点]]></description><category></category></item></channel></rss>