muduo例子流程解析 muduo例子流程解析 muduo库架构 首先回顾一下muudo库的架构,如下图所示: muduo库使用了Reactor模式,所谓Reactor模式,是有一个循环的过程,监听对应事件是否触发,触发时调用对应的callback进行处理。 这里的事件在muduo中包括Socket可读写事件、定时器事件。在其他网络库中如libevent也包括了signal、用户自定义事件等。 负责事件循环的部分在mu 2023-09-19 C++ > muduo #C++ #muduo
网络IO模型 网络IO模型 在《UNIX网络编程》一书中,总结归纳了5种IO模型: 阻塞IO(Blocking IO) 非阻塞IO(Nonblocking IO) IO多路复用(IO Multiplexing) 信号驱动IO(Signal Driven IO) 异步IO(Asynchronous IO) 阻塞IO 应用程序想要去读取数据,他是无法直接去读取磁盘数据的,他需要先到内核里边去等待内核操作硬件拿到 2023-09-13
Redis-高级篇-skiplist redis-skiplist 为什么引出跳表 先从一个单链表来说 对于一个单链表来讲,即便链表中存储的数据是有序的,如果我们要想在其中查找某个数据,也只能从头到尾遍历链表。这样查找效率就会很低,时间复杂度会很高O(N) 痛点 解决方法:升维,也即空间换时间 优化 案例:画一个包含64个节点的链表,按前面思路,建立五级索引 是什么 跳表是可以实现二分查找的有序链表 skiplist是一种 2023-09-11 redis #redis
redis笔记 redis笔记 redis笔记见REDIS6_分布式存储极致性能目录 尚未完成,待续... Redlcok算法 Redlock算法是redis作者提出的一种分布式锁算法,它的思想是由多个redis(这些redis是相互独立的,不存在主从复制或集群协调机制)实现。在加锁时,客户端首先要设置一个锁的失效时间,然后对每个redis实例进行加锁,如果从大多数的redis节点都取到锁且时间不超过锁的失效时间 2023-09-08 #redis
Cpp-STL-lower_bound和upper_bound高级用法 Cpp-STL-lower_bound和upper_bound高级用法 基本用法 我们都知道C++ STL中有两个函数lower_bound和upper_bound,它们都是在有序序列中进行二分查找的,lower_bound返回的是第一个大于等于给定值的元素的位置,upper_bound返回的是第一个大于给定值的元素的位置。 12345678910111213#include <iostre 2023-08-21 C++ #C++ #STL
快速幂计算 快速幂计算 快速幂,二进制取幂(Binary Exponentiation,也称平方法),是一个在 \(\Theta(\log n)\) 的时间内计算 \(a^n\) 的小技巧,而暴力的计算需要 \(\Theta(n)\) 的时间。 计算 a 的 n 次方表示将 n 个 a 乘在一起: \(a^{n} = \underbrace{a \times a \cdots \times a}_{n\tex 2023-08-15 数据结构与算法 #数据结构与算法 #leetcode
cpp-string split函数 C++ string split函数 C++标准库里面没有字符分割函数split,我们可以借助STL自己实现一个split函数,代码如下: 1234567891011121314151617// s是需要分割的字符串, v是存放分割后的字符串的vector, c是分割符string inputString = "Hello,World,C++,String,Splitting" 2023-08-14 C++ #C++
C++ 20-span容器 C++ 20-span容器 span 是 C++20 中引入的一个新的标准容器,它类似于C++ 17的std::string_view,我们知道std::string_view可以创建std::string的一个视图,视图本身并不拥有实例,它只是保持视图映射的状态。在不修改实例的情况下,使用std::string_view会让字符串处理的性能大幅提升。实际上,对于那些连续的序列对象我们都可以创建这 2023-07-18 C++ #C++
Cpp17-std::string_view用法 Cpp17-std::string_view std::string_view用法 C++ 中有两种风格的字符串,分别是C风格的字符串、std::string字符串。C风格的字符串性能更高,但是叶不方便使用。如下示例: 123456789101112131415#include <iostream>#include <string> int main(){ 2023-07-17 #C++
muduo库-StringPiece muduo库-StringPiece 在 StringPiece.h 文件中,声明了两个类类型,一个是 StringArg,另一个是 StringPiece,前者用于在传递函数参数时同时兼容 C 风格的字符串(const char*)和 C++ 风格的字符串(std::string)。而后者则可用于构建同时兼任这两种风格字符串的实例对象。 如果函数参数使用 const std::string&am 2023-07-17 C++ > muduo #C++ #muduo