Linux C++后台
文章平均质量分 80
他过江
分享C/C++/Linux/Qt/音视频/FFmpeg/OpenCV等相关技术。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
FastDFS源码分析-storage的线程分析
storage主要包括6种线程gdb attach storage进程ID 可以看到各线程堆栈:accept线程主线程是accept线程nio线程storage_service_init里创建了网络IO线程,work_thread_entrance可以看到线程2到5堆栈停在epoll_wait,网络IO线程默认是4个上报线程线程6是tracker_report_thread_entrance,用作storage向tracker上报信息调度线程线程7是调度线程,sched_thr原创 2022-04-11 17:59:00 · 1490 阅读 · 1 评论 -
使用有向邻接表检测死锁
使用有向邻接表检测死锁原创 2021-12-26 19:02:56 · 875 阅读 · 0 评论 -
简单的内存池实现
为什么要用内存池避免内存碎片减少系统调用次数(brk,mmap)内存碎片是什么不可用的空闲内存。这些内存小且不连续产生原因内存分配的起始地址需要是4/8/16的倍数(由CPU体系结构决定)夹在大块内存之间的小块空闲内存不易被使用可能出现问题服务器程序在长周期或者大量访问的情况后会变得反应迟钝,排查原因发现占用内存会随着请求数量的增多不规律而且不正常地增长,如果使用valgrind等工具发现没有内存泄露,则有可能是内存碎片。程序运行几天乃至几个月出现内存问题:例如malloc返回原创 2021-12-17 22:09:52 · 1136 阅读 · 0 评论 -
单线程reactor支持百万连接
C1000K目的测试单线程reactor能否支持百万连接。1个连接由5元组唯一确定:local_iplocal_portpeer_ippeer_portprotocal已知ubuntu-1604的默认的端口范围:32768-60999假设client有20000个端口能用,server开100个端口,用2个client去连接server,则理论最大连接数是:20000 x 100 x 2 = 400万。代码修改在reactor的基础上,server开启100个监听端口。虚拟机配原创 2021-12-11 03:19:39 · 2487 阅读 · 0 评论 -
350行C代码实现epoll reactor模型
有了epoll为什么还需要reactor?响应快,不必为单个同步事件所阻塞,虽然 Reactor 本身依然是同步的; 编程相对简单,可以最大程度的避免复杂的多线程及同步问题,并且避免了多线程/进 程的切换开销; 可扩展性,可以方便的通过增加 Reactor 实例个数来充分利用 CPU 资源; 可复用性,reactor 框架本身与具体事件处理逻辑无关,具有很高的复用性;reactor的思想:将对IO的处理转化为对事件的处理。reactor包括5个部分reactor管理器 注.原创 2021-12-10 16:36:30 · 2206 阅读 · 0 评论 -
理解linux内核数据结构尾队列(Tail queue)
Tail queue位于/usr/include/x86_64-linux-gnu/sys/queue.hqueue.h包含以下几种数据结构:双链表(List) 单链表(Singly-linked List) 单链尾队列(Singly-linked Tail queue) 简单队列(Simple queue) 双链尾队列(Tail queue) 循环队列(Circular queue)Tail queue几个参数含义HEADNAME链表头结点的名字,用TAILQ_HEAD(H原创 2021-11-29 15:53:12 · 2966 阅读 · 0 评论 -
180行C代码实现epoll echo server
#include <sys/epoll.h>#include <sys/socket.h>#include <stdio.h>#include <netinet/in.h> // sockaddr_in#include <netinet/ip.h>#include <arpa/inet.h> // inet_addr#include <errno.h>#include <string.h>#...原创 2021-11-14 23:50:08 · 1304 阅读 · 0 评论 -
代码配图快速理解红黑树
红黑树(英语:Red–black tree)是一种自平衡二叉查找树,典型用途是实现关联数组。红黑树的操作有着良好的最坏情况运行时间,并且在实践中高效:它可以在O(log n)时间内完成查找、插入和删除,这里的n是树中元素的数目。红黑树的性质红黑树是每个节点都带有颜色属性的二叉查找树,颜色为红色或黑色。在二叉查找树强制一般要求以外,对于任何有效的红黑树我们增加了如下的额外要求:节点是红色或黑色。 根是黑色。 所有叶子都是黑色(叶子是NIL节点)。 每个红色节点必须有两个黑色的子节点。(从每原创 2021-10-20 01:36:52 · 390 阅读 · 0 评论 -
DPDK-虚拟机配置网卡多队列
配置网卡多队列1.设置巨页sudo vim /etc/default/grub如果是虚拟机:GRUB_CMDLINE_LINUX改成GRUB_CMDLINE_LINUX="find_preseed=/preseed.cfg noprompt net.ifnames=0 biosdevname=0 default_hugepagesz=2M hugepagesz=2M hugepages=1024 isolcpus=0-2"如果是物理机:default_hugepages=原创 2021-09-07 11:32:25 · 4454 阅读 · 0 评论 -
protobuf笔记
官网:https://developers.google.com/protocol-buffers/docs/proto3https://developers.google.com/protocol-buffers/docs/encoding编译安装wget https://github.com/protocolbuffers/protobuf/archive/refs/tags/v3.17.3.tar.gzcd protobuf-3.17.3sh ./autogen.sh./cou原创 2021-07-26 23:48:31 · 527 阅读 · 0 评论 -
MongoDB笔记
目录遇到问题概念CURD操作索引聚合聚合管道集群主从复制集群复制集集群分片集群分片策略哈希分片范围分片遇到问题什么是分片?内存映射?有了内存映射为什么还弄个Journal?use创建集合后show dbs不能马上看到,要等一段时间?嵌入式文档和数组减少了对连接的需求?概念MongoDB一台机器可以有多个实例,每个实例端口不同,dbpath不同与redis区别:mongodb自带统计功能CURD操作原创 2021-07-07 22:26:09 · 406 阅读 · 0 评论 -
字符串查找匹配算法KMP
是什么:在主字符串中查找子字符串,返回第一次出现的子字符串的第一个字符索引为什么:暴力查找字符串的时间复杂度O(n*m),kmp时间复杂度O(n+m)。n是主串长度,m是模式串长度。例如待查找字符串ababababca(本文统称为主串s),要匹配的字符串abababca(本文统称模式串p)按照暴力查找的逻辑,主字符串匹配失败后接着回溯到首字符的下一个位置开始匹配,这样效率是很低的。而KMP可以在匹配失败的时候主串不回溯,只回溯模式串,这一行查找速度就快了很多。部分匹配表,即PMT.原创 2021-05-16 04:09:49 · 740 阅读 · 1 评论 -
C++模板实现十大排序算法
所有排序算法默认升序排序。1. 冒泡排序适用:元素个数小的情况template<typename T>void Swap(T &lhs, T&rhs){ T tmp = rhs; rhs = lhs; lhs = tmp;}template<typename T>void bubble_sort(T *arr, int n){ for (int i = 0; i < n - 1; ++i) { ..原创 2021-05-15 00:23:50 · 911 阅读 · 0 评论
分享