【C++】检测TCP链接超时——时间轮组件设计

【C++】检测TCP链接超时——时间轮组件设计

目录

引言

时间轮思想

设计的核心思路

完整代码

组件接口


个人主页:东洛的克莱斯韦克-ZEEKLOG博客

引言

        对于高并发的服务器来说,链接是一种比较珍贵的资源,对不活跃的链接应该及时释放。判断连接是否活跃的策略是——在给定的时间内,该链接上并没有读事件,写事件,异常事件等。如果连接上有事件发生,则刷新链接的活跃时间。

        而时间轮就可以高效的检测链接是否活跃,本文会带大家封装出一个时间轮的组件。

时间轮思想

        时间轮的思想来源于钟表,钟表的时分秒指针指到特定的位置,就代表时间到了。参考钟表的策略,我们可用一个数组代表一个钟表,数组的下标代表时间,指向数组的指针按特定的时间向后移动,指针执行哪个位置,就代表哪个位置的时间到了。

        相应的,指针1秒向后走一格,数组大小为60,这就是分级的时间轮。指针1分钟向后走一格,数组大小为60,这就是时级的时间轮。指针1小时向后走一格,数组大小为24,这就是天级的时间轮。

        也就是说对于时间特别大的场景中,不需要很大的的空间。比如,一个任务在1天3小时15分5秒后超时(假设)只要天级时间轮指向1,就把该任务抛到时级时间轮中...以此类推。

Read more

【C++:红黑树】深入理解红黑树的平衡之道:从原理、变色、旋转到完整实现代码

【C++:红黑树】深入理解红黑树的平衡之道:从原理、变色、旋转到完整实现代码

🔥艾莉丝努力练剑:个人主页 ❄专栏传送门:《C语言》、《数据结构与算法》、C/C++干货分享&学习过程记录、Linux操作系统编程详解、笔试/面试常见算法:从基础到进阶、测试开发要点全知道 ⭐️为天地立心,为生民立命,为往圣继绝学,为万世开太平 🎬艾莉丝的简介: 🎬艾莉丝的C++专栏简介: 目录 C++的两个参考文档 1  ~>  初识红黑树:概念熟悉 2 ~>  了解红黑树规则 2.1  红黑树的四条规则 2.1.1  红黑树规则 2.1.2  结合图示,体会红黑树规则 2.1.3  结合图例,理解红黑树的路径数量问题:NIL

By Ne0inhk

C++ 模板初阶:泛型编程的入门指南

在 C++ 编程中,我们经常会遇到这样的场景:需要实现功能完全相同,但处理数据类型不同的函数。比如交换两个整数、交换两个浮点数、交换两个字符的函数。最直接的想法是用函数重载,但这种方式的弊端显而易见 —— 代码复用率低、可维护性差。而模板(Template)作为泛型编程的核心,恰好解决了这个问题,让我们能编写与类型无关的通用代码。今天就带大家从零入门 C++ 模板的核心知识:函数模板与类模板。 一、泛型编程:模板的设计思想 1. 函数重载的痛点 先看一个熟悉的场景:实现不同类型的交换函数。用函数重载的写法如下: cpp // 交换int类型 void Swap(int& left, int& right) { int temp = left; left = right; right = temp; } // 交换double类型 void Swap(

By Ne0inhk

从零构建跨平台C++工程:CMake+Clang如何统一Windows/Linux开发流

第一章:C++ 跨平台开发:Windows vs Linux 适配 在现代软件开发中,C++ 因其高性能和底层控制能力被广泛用于跨平台应用。然而,Windows 与 Linux 在编译工具链、文件系统路径处理及系统调用等方面存在显著差异,开发者必须针对这些差异进行适配。 编译器与构建环境差异 Windows 上通常使用 MSVC(Microsoft Visual C++)编译器,而 Linux 主要依赖 GCC 或 Clang。为实现跨平台构建,推荐使用 CMake 统一管理项目配置: # CMakeLists.txt cmake_minimum_required(VERSION 3.10) project(CrossPlatformApp) set(CMAKE_CXX_STANDARD 17)

By Ne0inhk