博客园  :: 首页  :: 新随笔  :: 管理

随笔分类 -  C/C++ Server

摘要:Linux C/C++服务器 连接池 创建数据库连接是一个很耗时的操作,也容易对数据库造成安全隐患。所以,在程序初始化的时候,集中创建多个数据库连接,并把他们集中管理,供程序使用,可以保证较快的数据库读写速度,还更加安全可靠。 这里讲的数据库,不单只是指Mysql,也同样适用于Redis 连接池的意 阅读全文

posted @ 2023-03-18 16:04 wsg_blog 阅读(88) 评论(0) 推荐(0)

摘要:Linux C/C++服务器 线程池 为什么需要线程池? 某类任务非常耗时(磁盘io、网络io或cpu密集任务),严重影响该线程处理其他任务 解决办法就是把这些耗时任务放到其他线程异步去执行,线程资源的开销与cpu核心之间做平衡选择 线程池的作用:复用线程资源,减少线程创建和销毁的开销;充分利用系统 阅读全文

posted @ 2023-03-16 18:02 wsg_blog 阅读(63) 评论(0) 推荐(0)

摘要:Linux C/C++服务器 内存池 内存池只能降低内存碎片的产生,并不会减少内存泄漏的风险 通常,我们都采用new或者malloc动态申请内存。一般来说,少量的操作不会造成什么影响,但是,如果我们频繁去申请内存块,会造成效率上的损失,更有甚者,会造成内存碎片的存在,从而影响系统的效率(所有程序都可 阅读全文

posted @ 2023-03-15 07:06 wsg_blog 阅读(38) 评论(0) 推荐(0)

摘要:Linux C/C++服务器 异步请求与协程 1.1 什么是异步? 什么是异步?什么是同步? 同步:为一发一收,发完之后阻塞等待回传数据,处理完成然后再发下一条 异步:一直发,commit提交请求接口会一直连续提交请求,有一个专门的等待回传数据的线程,这里我们用epoll来管理接收数据的fd 1.2 阅读全文

posted @ 2023-03-15 06:16 wsg_blog 阅读(62) 评论(0) 推荐(0)

摘要:Linux c/c++ 高性能后端 定时器的几种实现方案 定时器的应用 网络心跳检测 游戏技能冷却 倒计时 其他需要延时处理的功能 定时器的触发方式 网络事件和定时事件在一个线程处理 通常使用在定时任务比较少的场景,redis、nginx、memcached都是这样处理定时任务的,通常最多组织102 阅读全文

posted @ 2023-03-14 00:11 wsg_blog 阅读(93) 评论(0) 推荐(0)

摘要:Linux C/C++服务器 内存泄漏检测组件 调用malloc或者new,没有调用free或delete 内存泄漏检测组件 如何判断是否有内存泄漏 到底在哪行代码泄漏 本文介绍三种内存泄漏检测的方法 mtrace 宏定义 hook malloc mtrace mtrace是系统自带的内存检测接口, 阅读全文

posted @ 2023-03-12 04:12 wsg_blog 阅读(57) 评论(0) 推荐(0)

摘要:Linux C/C++服务器 死锁检测组件 死锁存在的条件 死锁,是指多个线程或者进程在运行过程中因争夺资源而造成的一种僵局,当进程或者线程处于这种僵持状态,若无外力作用,它们将无法再向前推进。如下图所示,线程 A 想获取线程 B 的锁,线程 B 想获取线程 C 的锁,线程 C 想获取线程 D 的锁 阅读全文

posted @ 2023-03-11 21:51 wsg_blog 阅读(103) 评论(0) 推荐(0)

摘要:Linux C/C++服务器 原子操作CAS与锁 1.互斥锁 2.自旋锁 3.读写锁 4.原子操作 5.shmem 多线程同时操作同一个变量问题 多线程执行 idx++,实际运行是转换成三行汇编代码去运行,绝大多数情况下没啥问题,如下图所示 但有一小部分会出现问题,如下 如何解决? 首先想到的就是加 阅读全文

posted @ 2023-03-09 23:15 wsg_blog 阅读(144) 评论(0) 推荐(0)

摘要:Linux C/C++服务器 Posix API接口原理与网络状态 整理网络相关的各个状态和相关接口的工作原理 tcp建立连接 tcp状态机 tcp断开连接 网络api接口 客户端接口:socket()、bind()、connect()、send()、recv()、close() 服务端接口:soc 阅读全文

posted @ 2023-03-08 04:22 wsg_blog 阅读(182) 评论(0) 推荐(0)

摘要:Linux C/C++服务器 http服务器的实现 http服务器说的是在reactor网络io框架基础上加上http协议,实现可与浏览器交互的后端服务,reactor在之前有介绍,下面我们先来看看http协议都有哪些东西 http协议 http消息分两部分,一个是客户端请求消息,一个是服务器响应消 阅读全文

posted @ 2023-03-07 04:25 wsg_blog 阅读(380) 评论(0) 推荐(0)

摘要:Linux C/C++服务器 reactor的原理与百万并发 五元组 五元组:sip,sport,dip,dport,proto 源IP,源端口,目的IP,目的端口,协议 tcp的端口最大支持65536个,客户端和服务端ip都是固定的,为了测试百万并发,我们使用65536个客户端的端口,使用100个 阅读全文

posted @ 2023-03-04 03:40 wsg_blog 阅读(119) 评论(0) 推荐(0)

摘要:Linux C/C++服务器 网络io与select、epoll 网络io是什么?是网络连接的input与output,也就是socket,更进一步说就是fd 阻塞与非阻塞 io多路复用,检测io是否有事件(可读、可写) 同步与异步 头文件与listenfd的监听模块 不管select还是epoll 阅读全文

posted @ 2022-10-28 21:32 wsg_blog 阅读(85) 评论(0) 推荐(0)

摘要:Linux c/c++ 高性能后端 设计模式 学好设计模式需要对业务的稳定点和变化点有深刻的认识:业务的哪部分为稳定点,哪部分为变化点,从而进行合理的抽象,慎用设计模式,除非有明确的思路设计模式更好的能解决此类问题; 单例模式、工厂模式、观察者模式和代理模式 学习设计模式的意义: 1.读公司代码或开 阅读全文

posted @ 2022-10-21 00:54 wsg_blog 阅读(52) 评论(0) 推荐(0)

摘要:Linux C/C++服务器 海量数据去重的Hash与BloomFilter 散列表 根据 key 计算 key 在表中的位置的数据结构;是 key 和其所在存储地址的映射关系; 注意:散列表的节点中 kv 是存储在一起的; struct node { void *key; void *val; s 阅读全文

posted @ 2022-10-12 21:39 wsg_blog 阅读(144) 评论(0) 推荐(0)

摘要:Linux C/C++服务器 多路查找树(B树、B+树) 我们前面讨论的红黑树,处理数据都是在内存中,因此考虑的都是内存中的运算时间复杂度。但若我们要操作的数据集非常大,大到内存已经没办法处理了怎么办呢? 这种情况下,对数据的处理需要不断从硬盘等存储设备中调入或调出内存页面,一旦涉及到这样的外部存储 阅读全文

posted @ 2022-10-09 13:41 wsg_blog 阅读(347) 评论(0) 推荐(0)

摘要:Linux c/c++ 高性能后端 红黑树(rbTree) 一种特殊的平衡 二叉排序树,一般用于key,value查找,插入删除查找\(O(log_{2}n)\),应用广泛; 定义 具有二叉排序树性质 每个结点是红的或者黑的,根结点是黑的,每个叶子结点是黑的(一般叶子结点都是隐藏的空结点) 如果一个 阅读全文

posted @ 2022-10-09 13:33 wsg_blog 阅读(74) 评论(0) 推荐(0)

摘要:Linux c/c++ 零声后端高级架构师 1 C/C++ 基础 1.1.1 红黑树 1.1.2 磁盘存储链式的B树与B+树 1.1.3 海量数据去重的hash与BloomFilter 1.2.1 c++ 智能指针与右值引用 1.2.2 c++ 实现线程池 1.3.1 设计模式基础 1.3.2 结构 阅读全文

posted @ 2022-09-22 23:33 wsg_blog 阅读(448) 评论(0) 推荐(0)