- 博客(51)
- 资源 (1)
- 收藏
- 关注
原创 Docker安装记录
老是报错 “Error response from daemon: Get “https://registry-1.docker.io/v2/”: proxyconnect tcp: dial tcp 127.0.0.1:7890: connect: connection refused” ,不知道是什么原因,卸载了重装一下。
2024-05-08 09:29:23
1787
原创 bpf对内核的观测
bpftrace 总的来说是对线上项目的系统调用的函数的观测,因为这时已经不能往函数里面加log了。相关的开源项目 https://github.com/iovisor/bpftrace
2023-10-20 17:26:16
787
原创 redis主从同步对象模型学习笔记
从redis淘汰策略,持久化方式的优劣分析,存储协议,高可用性(主从复制,哨兵模式,cluster集群)等方面分析redis主从同步。
2023-06-28 17:46:32
425
原创 redis存储原理与数据模型学习笔记
理解一下,如下图,要访问节点12,第一层常规的遍历方法用的次数明显比蓝色箭头用的次数要多。非完美跳表,插入节点会用随机层数的方式,这样第二层对于第三层就可能不会是“每隔一个节点提取一个元素了”,相邻的元素可能会被直接提取到上一层,更高层也是。因为6%4=2, 6%8=6, 当key时2,6的时候,size=4, key%size = 2。ht_table二维指针,这里可以理解为指针数组,对应哈希存储数组 ht 的每一个槽位ht[i] 挂的是一个链表。ht的槽位成对出现,ht[1]是为扩容备用的。
2023-06-24 15:29:36
442
原创 redis协议与异步方式学习笔记
EVAL的第二个参数是参数的个数,后面的参数(从第三个参数),表示在脚本中所用到的那些 Redis 键(key),这些键名参数可以在 Lua 中通过全局变量 KEYS 数组,用 1 为基址的形式访问( KEYS[1] , KEYS[2] ,以此类推)。事务是整体同生共死,假如有ABCD四个节点与服务器连接,每一个节点中都可能有事物,其中任意一个节点都有可能宕机,为了保证事物的安全性,怎么办?numkeys 对应上面例子中的1,KEYS[1]表示 score:10001, 可选参数arg没有使用到。
2023-06-22 16:38:30
704
原创 理解内存序,指令重排与内存模型
1 多线程同步:当多个线程需要共享一个变量,并且需要确保每个线程对该变量的读操作都能够正确地获取最新值时,可以使用std::memory_order_acquire来确保同步。memory_order_relaxed (松散内存序): 只确保原子性,不具备同步性,顺序不一定,编译器,cpu都可以对ab、ef优化(改变顺序,重排)memory_order_acquire (获得操作): 原子性,同步性,顺序性 与memory_order_release 相反。a,b能否优化到c后面来?
2023-06-10 19:06:30
1088
原创 理解分布式锁的实现过程
在分布式系统中,一个应用部署在多台机器当中,在某些场景下,为了保证数据一致性,要求在同一时刻,同一任务只在一个节点上运行,即保证某个行为在同一时刻只能被一个线程执行;在单机单进程多线程环境,通过锁很容易做到,比如mutex、spinlock、信号量等;而在多机多进程环境中,此时就需要分布式锁来解决了;所谓的分布式场景就是:多机器,多网段,通过socket通信。
2023-06-07 17:28:35
266
原创 内存泄漏检测相关内容
通过拦截 malloc,free函数,然后以宏定义的方式,改造malloc, free: malloc的时候根据指针地址写一个文件,free的时候根据指针地址删除这个文件。最后根据留下的文件就可以知道哪个new没有释放内存了。_malloc__FILE____LINE___free__FILE____LINE__方法1的弊端是,最好是用在一个.c文件中,如果文件较多的话就不太适用。
2023-06-05 17:11:09
143
原创 用户态协议栈学习,DKDK基本用法介绍
这里以DPDK为例:(目的是为了获得原始的网络数据,除了DPDK,socket raw,netmap也能获取获取以太网数据)
2023-05-07 19:15:48
1008
原创 用ucontext库创建简单的协程
协程是一种轻量级的线。协程在程序运行时由程序员显式控制调度的,可以在同一个线程中实现多个协程之间的切换,从而实现并发执行的效果。比较经典的理解是:“用同步的方法,做着异步的事情”。协程避免了线程切换所带来的开销,在一些性能要求高、资源限制多的场合就特别的适用。协程上下文ucontext_t,里面包含了程序计数器、栈指针、寄存器等信息,它们表示了一个协程的运行状态。通过ucontext_t的简单封装,即可验证 “保存和恢复上下文” 来实现协程的切换的过程。
2023-04-28 15:57:03
589
原创 用wireshark抓tcp三次握手
用wirechark抓tcp三次握手。服务端的ip:192.168.1.91,起动一个简单tcp服务器reactor。点击连接,这里就完成了三次握手。
2023-04-27 14:43:13
455
原创 编译错误整理
这个错误通常是因为在代码中使用了未完整定义的结构体类型,导致编译器无法确定其大小。在这种情况下,无法使用sizeof运算符来计算结构体的大小。要解决这个问题,需要包含相应的头文件或在代码中定义完整的结构体类型。例如,在使用sockaddr_in结构体之前,需要在代码中包含头文件。
2023-04-27 09:22:24
1983
原创 20230422 2.2.3 Posix API与网络协议栈的一些认知
POSIX(Portable Operating System Interface)API是一组操作系统接口标准,旨在为不同的Unix操作系统提供一致的编程界面。它包括了许多常见的操作系统服务,如进程管理、文件管理、网络通信等。POSIX API由IEEE制定和管理,其标准编号为IEEE 1003。许多现代的操作系统都支持POSIX API,包括Linux、Mac OS X和Solaris等。
2023-04-25 10:30:54
200
原创 Reactor学习,从数据结构,内存分配,概念上分析
reactor可以用下面的结构体去抽象,它包含epoll的fd, zv_connect_t *block的数量(需要动态分配内存),然后它指向 zv_connblock_s链表的表头int epfd;int blkcnt;// 这里是指针,指向block的头 } zv_reactor_t;现在初始化它,假设有1024个block。
2023-04-23 22:13:38
151
原创 ubuntu内核降级相关
参考https://www.cnblogs.com/minseo/p/13065321.html在 /etc/apt/sources.list 的末尾加上然后更新之,apt-get updateapt-cache search linux-image > kernel_list.log打开 kernel_list.log ,找到你的目标 linux-image-5.4.0-42-generic,然后就可以安装了:apt install -y linux-image-5.4.0-42-generi
2023-04-19 09:36:10
714
原创 智能指针reset()
当使用reset函数时,智能指针的引用计数会相应地减少1。如果减少后引用计数变为0,则表示该资源不再被使用,可以安全地删除资源。当参数为空指针时,reset()会释放原来指针所管理的资源,同时将指针置为空。当参数为非空指针时,reset()函数接受一个可选参数,这个参数可以是一个指向新对象的指针,也可以是一个空指针。reset()会先释放原来指针所管理的资源,然后将指针重新指向新对象,此时此刻,如果有其它智能指针也指向它,只是计数减一。
2023-04-09 08:44:59
2291
2
原创 认识 std::async
std::async函数是异步执行的,它将任务提交到线程池中执行,线程池中的线程数量有限, 所以多个std::async的执行顺序和执行次数不确定,可能会出现乱序情况和多次执行的情况。因此,如果多个std::async函数的执行顺序很重要,可以使用std::future对象的wait()或者wait_for()方法来等待其它任务完成后再获取结果。此外,std::async函数的执行结果也不确定何时返回,需要通过调用std::future对象的get()方法来获取执行结果,认识 std::async。
2023-04-04 14:19:52
178
原创 vscode error LNK2019: 无法解析的外部符号 main,函数 “int __cdecl invoke_main(void)“ (?invoke_main@@YAHXZ) 中引用了该符
invoke_main@@YAHXZ) 中引用了该符号 [G:\c++\customer\vs_code\retry2\build\retry2_async.vcxproj][build] G:\c++\customer\vs_code\retry2\build\Debug\retry2_async.exe : fatal error LNK1120: 1 个无法解析的外部命令 [G:\c++\customer\vs_code\retry2\build\retry2_async.vcxproj]
2023-04-03 15:03:07
1217
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人