- 博客(12)
- 收藏
- 关注
原创 截断系统调用
linux常见的hook技术内核模块、Inline Hook、Got Hook、Preload Hook、系统文件修改需求需要将所有的进程的系统调用都截断可选的有内核模块、Preload Hook、系统文件修改。
2024-06-17 10:11:51
457
1
原创 定时器的设计
定时器是什么定时器是组织大量定时任务的模块。定时器如何实现首先我们从2个放面来看数据结构和驱动方式数据结构我们有2种思路一种是按定时时间长进行排序(按先后过期顺序),执行任务,常用红黑树,最小堆,跳表实现。另一种是按时间点进行组织(按照执行序),常用时间轮实现。先后过期顺序主要实现能高效排序和查找的功能红黑树这里红黑树的实现过于复杂,不过多赘述,简单介绍。其是一个平衡二叉树(AVL),是一个完全有序(中序遍历)的结构。nginx中和workflow中应用做
2024-01-30 13:13:24
435
1
原创 无锁消息队列
cache表示的是高速缓冲区为什么要有cache?为了更好的利用局部性原理,减少cpu访问主存的次数,提升效率,以及解决主存和cpu运行速度不匹配的问题。首先我们先了解我们的内存结构cpu->寄存器->一级缓存->二级缓存->三级缓存->主存。离cpu的位置越来越换,获取的速度越来越慢。而cpu获取内存的最小单位为cache line。cache是由cache line(缓存行)组成的。分为三个区域flag、tag、以及data,其中flag中存的是缓存一致性协议中的值,用来标记是否可见。
2024-01-26 15:32:24
1152
1
原创 服务器百万并发系统配置
ulimit -a 能看到资源的限制情况其中open files是指能打开的文件的数量,一般为1204,可通过ulimit -n<size>更改,例如:ulimit -n1048576,此时的更改只是临时的,要想永久有效要更改文件 /tec/sysctl.conf ,也可以修改/etc/security/limits.conf文件在末尾加上在末尾加上 fs.file-max = 1048576 服务端想要做到百万的链接就必须将此值改为大于100w。
2023-11-16 10:20:32
497
1
原创 用户态缓冲区
我们处理业务时,获取数据时可能有用户态和内核态的切换,这是很耗时的操作,如果我们吧从内核得到的数据放到应用层中,就能减少用户态到内核态的切换。同时我们用用户态缓冲区解决了生产和消费的耗时不同而导致的问题(生产者大于消费者)。同时我们的应用程序是以一个完整的数据包为单位处理数据的,而内核没有这个概念,我们就需要在用户态进行分包和粘包的处理。不同的协议和不用模型不能解决此问题,也就不影响用户态缓冲区的设计。
2023-11-11 21:29:54
117
1
原创 io多路复用
io可以分为阻塞和非阻塞ioio多路复用的前提是使用非阻塞io通过fcnt函数控制,如下设置成非阻塞;阻塞和非阻塞的区别在于无数据的时候是否返回;在以前的网络使用阻塞io,服务器处理的时候,是采用一问一答的方式,这种方式虽然可行但是由于阻塞,效率低下,而且想要同时处理多个链接的时候就需要多线程或多进程实现(一个链接一个线程或进程),这样的代价太大,性能低,但是逻辑简单。io多路复用能解决这些问题。
2023-10-28 01:07:16
43
原创 TCP服务器的基础实现
基于tcp的服务器首先要利用socket函数申请文件描述符fd,再通过bind绑定本机的网络通信的地址sockaddr,进而通过listen函数来进行端口的监听,从而运用accept函数得到用于通信的文件描述符fd(此描述符是accept函数的返回值,与上文不同)。
2023-10-26 13:25:03
55
原创 stack and 队列
初始化就是分配内存判是否分配成功 再指向数组 然后下标初始化0。判满 注意条件(rear+1)%size==front!元素个数(rear-front+size)%size。注意2 循环链表有一个元素是空的。初始化就是把2个指针分别都指向数组头。注意栈顶指针一直指向尾元素的下一位置。要与链表一样考虑是否分配内存成功。注意取栈顶和出栈的区别。本质也是数组(用的多)判空 条件为是否相等。
2023-06-06 20:45:28
37
原创 博客摘录「 VScode配置C++环境」2023年5月31日 单链表
同头插法第一步(make头结点、make临时节点指针、以及make尾节点指针)以及获取元素个数。第一步(make临时指针指向头结点的下一个元素、是链表的第一个元素)临时指针*2(一个记录链表中的位置、一个记录要插入的元素)、计数器。注意由于是要删除元素只能找到他的前一个元素(注意与插入元素作对比)第一步让外面的指针指向new的结构当做头节点(make头结点)临时指针*2(存放待删除的元素、以及链表中的位置)、计数器。循环条件为(小于要找的元素&&临时指针不为空)要从外界获得指向头结点的指针(参数中)
2023-06-05 19:45:28
123
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人