自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 问答 (3)
  • 收藏
  • 关注

转载 深入 Linux 内核理解 Socket 的本质

socket 中文套接字,可理解为一套用于连接的数字。sock 在内核,socket_fd 在用户空间,socket 层介于内核和用户空间之间。在操作系统内核空间里,实现网络传输功能的结构是 sock,基于不同的协议和应用场景,会被泛化为各种类型的 xx_sock,它们结合硬件,共同实现了网络传输功能。

2025-05-02 10:58:55 43

原创 Redis 处理读请求

在前文“”中,Redis 将接收的客户端连接加入了 epoll 中监听,同时还设置了读事件处理器。假设现在客户端向 Redis 发来一条命令。

2025-04-22 23:56:00 881

原创 Redis 接收连接

本文只关注 TCP 连接。对于监听 Socket,没必要为它们创建connection对象和client对象。

2025-04-22 01:18:33 777

转载 Redis 网络连接层的过去、现状和展望

转载自“”,进行了些许修改。

2025-04-21 18:57:01 49

原创 Redis 事件循环(Event Loop)

Redis 采用的事件驱动模型,其事件循环核心逻辑在ae.c中实现。本文基于 Linux 下的 epoll 事件驱动模型。

2025-04-20 20:48:54 820

原创 Redis save 和 bgsave 命令

Redis 源码版本:redis-6.2.17。

2025-04-19 23:42:27 871

原创 Nginx epoll 事件驱动

高并发是 Nginx 最大的优势之一,而高并发的原因就是 Nginx 强大的事件模块。本文将重点介绍 Nginx 是如果利用 Linux 系统的 Epoll 来完成高并发的。Nginx 框架定义了 6 种类型的模块,分别是 、、、、 和 ,所有的 Nginx 模块都必须属于这 6 类模块。 的 字段表示模块的类型,取值必须是以下 6 个宏:Core 模块(NGX_CORE_MODULE):目前 Nginx 有 10 个 Core 模块,如下:Event 模块(NGX_EVE

2025-04-14 00:21:19 712

原创 shutdown()

shutdown()调用会导致与_sockfd_关联的套接字上的全双工连接全部或部分关闭。如果_how_是SHUT_RD,则不允许进一步接收数据。如果 how 是SHUT_WR,则不允许进一步发送数据。如果how是SHUT_RDWR,则不允许进一步接收和发送数据。

2025-04-13 14:54:45 900

原创 NioEventLoop 对象的创建

老样子,先贴出的继承类图。在之前的文章“NioEventLoopGroup 对象的创建”中,创建对象时,会调用newChild()循环创建对象。我们就从newChild()方法切入,讲解。

2025-04-06 22:11:43 965

原创 NioEventLoopGroup 对象的创建

示例代码// BossGroup 仅需 1 线程处理连接请求// WorkerGroup 按 CPU 核心数动态分配(默认核心数的 2 倍)上面的代码使用 Netty 的主从 Reactor 架构。BossGroup(主 Reactor):负责监听 TCP 连接请求(accept事件)。通常配置为单线程((从 Reactor):监听并处理已建立连接的 I/O 读写事件(read/write 事件)。Netty 默认将 WorkerGroup 中的线程数其设置为 CPU 核心数的 2 倍。

2025-04-06 16:46:32 717

原创 Netty Selector 优化

Netty、Selector

2025-04-06 01:14:44 268

原创 SelectorProvider.provider()

不同操作系统对的实现存在显著差异,这主要源于它们底层 I/O 多路复用机制的不同。SelectorSelectorSelector我们以 Linux 系统为例。Java NIO 程序中,通常会调用获取多路复用器Selector。Linux 系统中,的静态方法provider()会返回对象。根据provider()方法的逻辑, 依次调用 3 个方法去获取对象,直到首次获取成功后返回。

2025-04-05 21:02:22 837

原创 使用 Grub2 在 x86 架构上引导 Linux

网上有许多关于如何使用 Grub2 的信息。Grub2 官方网站也有一些关于其工作原理的非常详细的资料。然而,似乎没有一个像样的、能在 15 分钟内讲清楚 x86 个人计算机如何使用 Grub2 引导 Linux 内核的概述;本文旨在提供这样的概述。和其他任何概述一样,本文省略了许多细节;要完整描述 Grub2 的话,恐怕得写成一本教科书,而不是一篇简短的介绍了。如需了解更多信息,请访问 Grub2 官方网站。本文不是 Grub2 的使用指南或参考手册;

2025-03-28 23:31:15 962

原创 BOIS INT 13h(Direct Disk Service)

INT 13h是 BIOS 中断调用 13H 的简写,是基于 x86 架构(源自 IBM PC)的计算机系统中的第 20 个中断向量。BIOS 通常在此向量处设置一个实模式中断处理程序,该程序提供基于扇区的硬盘和软盘读写服务。最初的 BIOS 实模式INT 13h接口使用通常所说的物理柱面 - 磁头 - 扇区()寻址方式,支持最大约 8GB 大小的驱动器。这个限制源于 IBM PC/XT 磁盘硬件的硬件接口。为了支持对更大磁盘的寻址,IBM 和微软引入了一个名为INT 13h。

2025-03-27 22:08:26 793

原创 linux内核系统调用宏SYSCALL_DEFINE

linux系统调用宏

2023-02-10 12:47:51 1379

转载 C++的函数重载

函数重载的重要性不言而明,但是你知道C++中函数重载是如何实现的呢(虽然本文谈的是C++中函数重载的实现,但我想其它语言也是类似的)?这个可以分解为下面两个问题声明/定义重载函数时,是如何解决命名冲突的?(抛开函数重载不谈,using就是一种解决命名冲突的方法,解决命名冲突还有很多其它的方法,这里就不论述了)当我们调用一个重载的函数时,又是如何去解析的?(即怎么知道调用的是哪个函数呢)这两个问题是任何支持函数重载的语言都必须要解决的问题!带着这两个问题,我们开始本文的探讨。本文的主要内容如下:

2022-04-02 22:42:19 7483

原创 Ubuntu18配置静态IP地址

1. 记住网卡名称ifconfig2. 记住网关地址#netstat -rn3. 配置静态IP注意:Ubuntu18固定IP的方式跟Ubuntu18之前版本的的配置方式不同,Ubuntu18之前在/etc/network/interfaces进行配置,Ubuntu18及之后版本在/etc/netplan/*.yaml进行配置,如/etc/netplan/01-network-manager-all.yaml,如果/etc/netplan目录下没有yml文件,则可以新建一个sudo

2022-04-02 10:42:11 10901

转载 路由选择的最长匹配原则

最长匹配原则 是支持IP路由的设备默认的路由查找方式(事实上几乎所有支持IP路由的设备都是这种查找方式)。当路由器收到一个IP数据包时,会将数据包的目的IP地址与自己本地路由表中的表项进行bit by bit的逐位查找,直到找到匹配度最长的条目,这叫最长匹配原则。这里有几个概念要先搞清楚:看上面的图,这是一个形象化的二维空间图。深灰色的空间 172.16.0.0/16,这个网络号,我们称为 主类网络号,所谓主类网络号,意思是该网络号按照其所属的IP地址类别区分后、对应上的默认的子网掩码长度后得到的网络

2021-06-28 11:11:31 9519

原创 操作数寻址(operand addressing)

操作数寻址(operand addressing)x86 机器指令可以有0或多个操作数,一些操作数显式指出,其他则隐式指出。源操作数(source operand)可以放在如下地方:指令本身(立即数)寄存器内存I/O端口目标操作数(destination operand)寄存器内存I/O端口立即数(Immediate Operands)一些指令的源操作数被编码在指令当中,这些操作数被称为立即数( immediate operands 或 immediates)。例如:83

2021-05-31 23:38:22 1226

原创 operand-size和address-size属性

operand-size和address-size属性当处理器工作在 保护模式(the protected mode)时,每个代码段(code segment )都会有一个默认的 operand-size 属性和 address-size 属性。这两个属性值由 代码段描述符 的 D标志位 指定。若 D标志位 被设置为 1,则表示 operand-size 和 address-size 都是 32-bit。若 D标志位 被设置为 0,则表示 operand-size 和 address-size 都

2021-05-28 19:05:19 555

原创 Java访问权限控制

参考《Java核心技术》1.修饰类默认访问权限(即包访问权限):用来修饰类的话,表示该类只对同一个包中的其他类可见。public:用来修饰类的话,表示该类对其他所有的类都可见。2.修饰类的字段和方法private:如果一个类的方法或者字段被private修饰,那么这个类的方法或者字段只能在该类本身中被访问,在类外以及其他类中都不能显示地进行访问。默认访问权限(即包访问权限):如果一个类...

2020-04-25 16:22:55 162

原创 结构体字节对齐

结构体字节对齐字节对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。比如有些架构的CPU在访问一个没有进行对齐的变量的时候会发生错误,那么在这种架构下编程必须保证字节对齐.其他平台可能没有这种情况,但是最常见的是如果不按照适合其平台要求对数据存放进行对齐,会在存取效率上带来损失。比如有些平台每次读都是从偶地址开始,如果一个i...

2020-03-31 21:27:39 863

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除