<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[alpha_love的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/alpha_love</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; alpha_love]]></copyright><item><title><![CDATA[Redis 6.0 源码阅读笔记(14) -- redis 时序图]]></title><link>https://blog.csdn.net/alpha_love/article/details/109279992</link><guid>https://blog.csdn.net/alpha_love/article/details/109279992</guid><author>alpha_love</author><pubDate>Tue, 03 May 2022 18:47:49 +0800</pubDate><description><![CDATA[使用strat uml 画出redis建立连接，响应客户端

1.the process to accept a redis client connection





2.the process to receive the data of command and handle the command,but not include sending the response to client

待画





3.the process to repsonse client

待画




...]]></description><category></category></item><item><title><![CDATA[linux 进程的pid分配策略——pid位图算法]]></title><link>https://blog.csdn.net/alpha_love/article/details/119546858</link><guid>https://blog.csdn.net/alpha_love/article/details/119546858</guid><author>alpha_love</author><pubDate>Thu, 23 Sep 2021 22:53:24 +0800</pubDate><description><![CDATA[https://www.bilibili.com/video/BV1aK4y1C7DH?from=search&amp;seid=13205632413617942586
]]></description><category></category></item><item><title><![CDATA[hive简单介绍]]></title><link>https://blog.csdn.net/alpha_love/article/details/120255738</link><guid>https://blog.csdn.net/alpha_love/article/details/120255738</guid><author>alpha_love</author><pubDate>Sun, 12 Sep 2021 20:50:46 +0800</pubDate><description><![CDATA[Hive有关介绍
Hive是什么
使用Hive的好处
Hive的特点
Hive架构
Hive工作原理
Hive的适用场景
Hive中表的分类
Hive与HBase的联系和区别
Hive与HBase的联系
Hive与HBase的区别
Hive是什么
（1）由Facebook开源，最初用于解决海量结构化的日志数据统计问题；
​（2）构建在Hadoop之上的数据仓库；
（3）Hive定义了一种类SQL查询语言：HQL（类似SQL但不完全相同）；
​（4）通常用于进行离线数据处理（采用MapReduce）；
​（5]]></description><category></category></item><item><title><![CDATA[go遍历结构体（struct）字段对应的值，切片（slice），字典（map）]]></title><link>https://blog.csdn.net/alpha_love/article/details/119284509</link><guid>https://blog.csdn.net/alpha_love/article/details/119284509</guid><author>alpha_love</author><pubDate>Sun, 01 Aug 2021 00:49:01 +0800</pubDate><description><![CDATA[一、遍历结构体字段：
eg1:
package main
import (
    "fmt"
    "reflect"
)
type person struct {
    name string
    age  int
}
func main() {
    v := reflect.ValueOf(person{"steve", 30})
    count := v.NumField()
    for i := 0; i &lt; count; i++ {
        f := v.Fie]]></description><category></category></item><item><title><![CDATA[Golang 接口切片存储多层嵌套Map对象，如何初始化，又如何直接读取嵌套层的key-value值]]></title><link>https://blog.csdn.net/alpha_love/article/details/119284450</link><guid>https://blog.csdn.net/alpha_love/article/details/119284450</guid><author>alpha_love</author><pubDate>Sun, 01 Aug 2021 00:45:26 +0800</pubDate><description><![CDATA[package main
import (
“fmt”
“reflect”
)
func main() {
//定义一个接口类型的切片
in := make([]interface{}, 3)
m1 := make(map[string]string)
m2 := make(map[string][]byte)
//初始化键值对
m1 = map[string]string{
“teleplay1”:  “情定大饭店”,
“teleplay2”:  “天国的阶梯”,
“teleplay3”:  “爱在哈佛”]]></description><category></category></item><item><title><![CDATA[go语言json嵌套数组结构体用法]]></title><link>https://blog.csdn.net/alpha_love/article/details/117431848</link><guid>https://blog.csdn.net/alpha_love/article/details/117431848</guid><author>alpha_love</author><pubDate>Sun, 01 Aug 2021 00:41:47 +0800</pubDate><description><![CDATA[文章目录
前言
1. RDB 文件持久化的优缺点
2. RDB 的触发方式
2.1 save 命令触发
2.2 bgsave 命令触发
2.3 定时任务触发
2.4 主从同步全量复制触发
3. RDB 的处理流程
3.1 RDB 文件传输
3.2 socket 无盘传输
4. RDB 涉及的技术原理
4.1 写时复制 Copy On Write
4.2 diskless 无盘传输的管道读写
前言
Redis 是基于内存的 KV 数据库，使用时所有数据都在内存中，这就是它存取性能高的重要原因之一。但是如我们所]]></description><category></category></item><item><title><![CDATA[Nginx源码分析 - 核心模块初始化顺序，根据ctx创建上下文]]></title><link>https://blog.csdn.net/alpha_love/article/details/117792717</link><guid>https://blog.csdn.net/alpha_love/article/details/117792717</guid><author>alpha_love</author><pubDate>Thu, 10 Jun 2021 22:39:37 +0800</pubDate><description><![CDATA[1. 在ngx_cycle_t * ngx_init_cycle(ngx_cycle_t *old_cycle)函数中，取出核心模块，然后创建上下文





2. 使用GDB打印断点查看内容












]]></description><category></category></item><item><title><![CDATA[Nginx源码分析 -  模块的赋值及编号  --- 方便了解nginx模块]]></title><link>https://blog.csdn.net/alpha_love/article/details/117792042</link><guid>https://blog.csdn.net/alpha_love/article/details/117792042</guid><author>alpha_love</author><pubDate>Thu, 10 Jun 2021 22:08:42 +0800</pubDate><description><![CDATA[使用gdb跟踪



在编译完成后，根据makfie的配置就生成了下面两种



在main函数中完成了对模块的编号



上图中的成员赋值，在下面gdb打印出的值是一致的，还可以打印共有多少个模块及模块的最大值














...]]></description><category></category></item><item><title><![CDATA[拆解 Linux 网络包发送过程]]></title><link>https://blog.csdn.net/alpha_love/article/details/117458275</link><guid>https://blog.csdn.net/alpha_love/article/details/117458275</guid><author>alpha_love</author><pubDate>Tue, 08 Jun 2021 07:24:20 +0800</pubDate><description><![CDATA[在开始今天的文章之前，我先来请大家思考几个小问题。

问1：我们在查看内核发送数据消耗的 CPU 时，是应该看 sy 还是 si ？
	问2：为什么你服务器上的 /proc/softirqs 里 NET_RX 要比 NET_TX 大的多的多？
	问3：发送网络数据的时候都涉及到哪些内存拷贝操作？
这些问题虽然在线上经常看到，但我们似乎很少去深究。如果真的能透彻地把这些问题理解到位，我们对性能的掌控能力将会变得更强。

带着这三个问题，我们开始今天对 Linux 内核网络发送过程的深度剖析。还是按照我们之前的]]></description><category></category></item><item><title><![CDATA[Redis 持久化 RDB 详解]]></title><link>https://blog.csdn.net/alpha_love/article/details/117431874</link><guid>https://blog.csdn.net/alpha_love/article/details/117431874</guid><author>alpha_love</author><pubDate>Mon, 31 May 2021 22:53:15 +0800</pubDate><description><![CDATA[文章目录
前言
1. RDB 文件持久化的优缺点
2. RDB 的触发方式
2.1 save 命令触发
2.2 bgsave 命令触发
2.3 定时任务触发
2.4 主从同步全量复制触发
3. RDB 的处理流程
3.1 RDB 文件传输
3.2 socket 无盘传输
4. RDB 涉及的技术原理
4.1 写时复制 Copy On Write
4.2 diskless 无盘传输的管道读写
前言
Redis 是基于内存的 KV 数据库，使用时所有数据都在内存中，这就是它存取性能高的重要原因之一。但是如我们所]]></description><category></category></item><item><title><![CDATA[Nginx惊群问题分析及解决]]></title><link>https://blog.csdn.net/alpha_love/article/details/117376396</link><guid>https://blog.csdn.net/alpha_love/article/details/117376396</guid><author>alpha_love</author><pubDate>Sat, 29 May 2021 00:06:19 +0800</pubDate><description><![CDATA[1. 惊群效应

1.1 简介

惊群问题又名惊群效应。简单来说就是多个进程或者线程在等待同一个事件，当事件发生时，所有线程和进程都会被内核唤醒。唤醒后通常只有一个进程获得了该事件并进行处理，其他进程发现获取事件失败后又继续进入了等待状态，在一定程度上降低了系统性能。

打个比方就是：当你往一群鸽子中间扔一块食物，虽然最终只有一个鸽子抢到食物，但所有鸽子都会被惊动来争夺，没有抢到食物的鸽子只好回去继续睡觉， 等待下一块食物到来。这样，每扔一块食物，都会惊动所有的鸽子，即为惊群。

简单地说：就是扔一块食物，]]></description><category></category></item><item><title><![CDATA[Redis 6.0 源码阅读笔记(5) -- List 数据类型源码分析]]></title><link>https://blog.csdn.net/alpha_love/article/details/117049141</link><guid>https://blog.csdn.net/alpha_love/article/details/117049141</guid><author>alpha_love</author><pubDate>Wed, 19 May 2021 23:25:39 +0800</pubDate><description><![CDATA[使用GDB跟踪Redis源码list push过程













127.0.0.1:6379&gt; LPUSH runoobkey redis
runoobkey key
redis value







当你push多个时：127.0.0.1:6379&gt; LPUSH runoobkey redis2 redis3



存储的结构
redis 对于 List 的存储共有 3 种存储形式，其中 OBJ_ENCODING_LINKEDLIST已经彻底废弃不再讨论，其它两种存储形式的内]]></description><category></category></item><item><title><![CDATA[Nginx源码分析 - 实战篇 - 编写一个阶段化的模块（25）]]></title><link>https://blog.csdn.net/alpha_love/article/details/116724558</link><guid>https://blog.csdn.net/alpha_love/article/details/116724558</guid><author>alpha_love</author><pubDate>Thu, 13 May 2021 12:26:42 +0800</pubDate><description><![CDATA[目录

一、代码实例

二、初始化绑定阶段处理

三、回调函数写日志

四、编译调试结果

一、代码实例
HTTP模块篇，我们讲过Nginx的HTTP阶段处理 《Nginx源码分析 - HTTP模块篇 - HTTP模块的阶段处理PHASE handler》

我们代码在《Nginx源码分析 - 实战篇 - 编写一个自定义的模块》的基础上，将定义一个回调函数挂载到HTTP处理的阶段上。


#include &lt;ngx_config.h&gt;
#include &lt;ngx_core.h&gt;
#i]]></description><category></category></item><item><title><![CDATA[Nginx源码分析 - 实战篇 - 编写一个自定义的模块（24）]]></title><link>https://blog.csdn.net/alpha_love/article/details/116724528</link><guid>https://blog.csdn.net/alpha_love/article/details/116724528</guid><author>alpha_love</author><pubDate>Thu, 13 May 2021 12:26:28 +0800</pubDate><description><![CDATA[目录

一、创建扩展模块目录

二、创建config文件

三、创建ngx_http_hello_module.c文件

四、修改Nginx.conf文件

五、编译Nginx源码

六、浏览器访问

从前面的篇章中，我们基本了解了Nginx的运行原理。Nginx整个框架都是通过模块的方式，对整个系统进行解耦和扩展。在HTTP的http/modules/目录下，有非常多的关于HTTP协议的模块，每个模块都有不同的功能。

接下去我们就需要创建一个自定义的模块。

一、创建扩展模块目录

我们在nginx-1]]></description><category></category></item><item><title><![CDATA[Nginx源码分析 - HTTP模块篇 - HTTP模块的阶段处理PHASE handler（23）]]></title><link>https://blog.csdn.net/alpha_love/article/details/116724496</link><guid>https://blog.csdn.net/alpha_love/article/details/116724496</guid><author>alpha_love</author><pubDate>Thu, 13 May 2021 12:25:44 +0800</pubDate><description><![CDATA[目录

一、HTTP模块11个阶段处理

二、阶段处理的初始化ngx_http_block

三、阶段处理过程ngx_http_core_run_phases

四、挂载自定义模块

上一章我们讲解了HTTP request的解析过程。我们基本知道了Nginx是如何解析HTTP的行和头。

这一章我们主要讲解Nginx的阶段处理（PHASE 状态机实现）。阶段处理的概念如何理解，我举个例子：一个HTTP请求过来，除了解析HTTP的行和头外，还需要解析URI的rewrite、接受HTTP BODY中的POST]]></description><category></category></item><item><title><![CDATA[Nginx源码分析 - HTTP模块篇 - HTTP Request解析过程（22）]]></title><link>https://blog.csdn.net/alpha_love/article/details/116724432</link><guid>https://blog.csdn.net/alpha_love/article/details/116724432</guid><author>alpha_love</author><pubDate>Thu, 13 May 2021 12:25:10 +0800</pubDate><description><![CDATA[目录

一、HTTP Request解析流程图

二、源码分析

1. 等待read事件ngx_http_wait_request_handler

2. 处理头部请求行ngx_http_process_request_line

3. 处理HTTP协议的header部分ngx_http_process_request_headers

4. 处理request信息ngx_http_process_request

5. 核心分发函数ngx_http_handler

上一章我们讲解了整个Nginx的tcp]]></description><category></category></item><item><title><![CDATA[Nginx源码分析 - HTTP模块篇 - TCP连接建立过程（21）]]></title><link>https://blog.csdn.net/alpha_love/article/details/116724020</link><guid>https://blog.csdn.net/alpha_love/article/details/116724020</guid><author>alpha_love</author><pubDate>Thu, 13 May 2021 12:24:54 +0800</pubDate><description><![CDATA[目录

一、监听套接字初始化函数ngx_http_optimize_servers

二、Nginx整个连接的过程

上一章，我们讲解了HTTP模块是如何初始化的。这一章节，主要讲解监听套接字初始化函数ngx_http_optimize_servers和Nginx整个连接的过程

一、监听套接字初始化函数ngx_http_optimize_servers
ngx_http_optimize_servers主要处理Nginx服务的监听套接字


/**
 * ngx_http_optimize_servers]]></description><category></category></item><item><title><![CDATA[Nginx源码分析 - HTTP模块篇 - HTTP模块的初始化（20）]]></title><link>https://blog.csdn.net/alpha_love/article/details/116723987</link><guid>https://blog.csdn.net/alpha_love/article/details/116723987</guid><author>alpha_love</author><pubDate>Wed, 12 May 2021 23:07:42 +0800</pubDate><description><![CDATA[目录

一、http模块的配置

二、HTTP核心模块的数据结构

三、ngx_http_block函数详解

前面几章整理了Nginx的事件模块，这一章开始整理HTTP模块。

HTTP模块的初始化工作，都在src/http/nginx_http.c 中的ngx_http_block函数中进行的。

一、http模块的配置
在看nginx_http_block之前，我们还必须看一下nginx.conf中 HTTP大模块的配置文件，只有理解了HTTP模块的配置，才能更好的理解HTTP模块如何初始化的。

配]]></description><category></category></item><item><title><![CDATA[Nginx源码分析 - Event事件篇 - Epoll事件模块（19）]]></title><link>https://blog.csdn.net/alpha_love/article/details/116723921</link><guid>https://blog.csdn.net/alpha_love/article/details/116723921</guid><author>alpha_love</author><pubDate>Wed, 12 May 2021 23:05:58 +0800</pubDate><description><![CDATA[目录

一、Epoll模块的数据结构

1. epoll模块命令集 ngx_epoll_commands

2. epoll模块上下文 ngx_epoll_module_ctx

3. epoll模块配置 ngx_epoll_module

二、Epoll模块的初始化

1. 配置文件初始化ngx_events_block

2. 模块初始化ngx_event_process_init

三、核心函数

1. ngx_epoll_process_events实现了收集、分发事件接口

这一篇主要讲解一下..]]></description><category></category></item><item><title><![CDATA[Nginx源码分析 - Event事件篇 - Event模块的进程初始化（18）]]></title><link>https://blog.csdn.net/alpha_love/article/details/116723858</link><guid>https://blog.csdn.net/alpha_love/article/details/116723858</guid><author>alpha_love</author><pubDate>Wed, 12 May 2021 23:02:15 +0800</pubDate><description><![CDATA[目录

一、源码分析

1. Event核心模块ngx_event_core_module

2. Event模块初始化ngx_worker_process_init

3. 初始化核心函数ngx_event_process_init

二、TCP连接和读取事件逻辑

1. ngx_event_process_init 初始化事件循环

2.ngx_http_init_connection 初始化http连接，读取read事件数据

3. ls-&gt;handler的回调函数是如何赋值的

前面一篇我..]]></description><category></category></item></channel></rss>