008-性能调优
文章平均质量分 63
性能调优
牛不才
c/c++ linux 后端 架构 搜索引擎
展开
-
benchmark::State & benchmark 原理
除了时间,你还可以通过来报告其他自定义指标。// 测试代码// 设置自定义指标。原创 2024-05-28 23:44:03 · 1096 阅读 · 0 评论 -
Google Benchmark库 简介
在C++中,进行性能测试(Benchmarking)是一个常见的需求,用以测量代码块的执行时间,从而对代码进行优化。Google Benchmark库是一个广泛使用的C++库,专门用于编写稳健的基准测试。原创 2024-05-28 23:37:51 · 997 阅读 · 0 评论 -
不要在栈上分配大数组
但是,这个值是可以配置的。在C++中,如果你在函数中创建一个非常大的数组,它可能会导致栈溢出。这是因为,对于大多数系统,栈的大小是有限的,通常比堆小得多。请注意,尽管可以增加栈的大小,但是栈的空间总是有限的。堆的大小只受到系统可用内存的限制,而栈的大小受到更多的限制。在C++中,栈的大小是由编译器和操作系统决定的,并不是由C++语言本身规定的。所以,尽管可以增加栈的大小,但是最好尽量避免在栈上分配大量的内存。如果你试图在栈上分配一个超出其容量的大数组,可能会导致栈溢出错误,这通常会导致程序崩溃。原创 2023-09-20 09:13:11 · 313 阅读 · 0 评论 -
MySQL连接池
当程序中频繁访问数据库时,我们可以采用向内存池、线程池那样的池化技术,引入数据库连接池,减少申请和释放数据库连接的操作,从而提高性能。在很多C++库中都集成了连接池,下面以Poco的mysql连接池为例进行简要的介绍,下面是代码示例,其他数据库连接池的使用也是类似。需要指定数据库连接的参数、最大最小连接数还有空闲时间。...原创 2021-06-20 23:13:27 · 506 阅读 · 1 评论 -
表设计中的陷阱与建议
1. 数字类型1.1 整型类型数量字段用 unsigned 还是signed? 一般来讲,数量不可能为负值,用unsigned是理所应当的事情。但是如下情况,做此类减法的统计,那么报错就来了。大意是计算值为负,超出了unsigned的范围。这个可以通过SET sql_mode='NO_UNSIGNED_SUBTRACTION';解决。但是如果有符号整型可以满足需求,那么就不要使用无符号整型,否则就会有类似不必要的麻烦。MariaDB [mysql]> CREATE TABLE Item原创 2021-05-14 22:05:58 · 286 阅读 · 0 评论 -
如何避免和检查C++中的内存错误
内存问题一直是C/C++程序员的心头大患,因为没有GC机制,所以需要我们自己管理内存。在 从“new和malloc的不同”出发看CC++的内存分配 一文中,讲述了几种内存错误的例子,那么避免这些陷阱呢?1. new/delete 、malloc/free、new[]/delete[] 不匹配,导致的内存污染或者内存泄漏2. 野指针,delete/free之后,没有置NULL,再次使用3. delete/free之后,再次释放,double free3. 申请内存之后,没有判断是否成功,直接原创 2021-04-14 20:10:09 · 1026 阅读 · 0 评论 -
MySql中的锁
锁的分类根据锁的粒度,锁可以分为以下三大类:行级锁(InnoDB存储引擎)表级锁(MyISAM存储引擎)页级锁(BDB存储引擎)行级锁行级锁是粒度最小的锁,它能锁定到具体某一行,加锁开销大,相应的支持并发也最高的。但可能会出现死锁的现象。它分为共享锁、排他锁等。表级锁表级锁锁定的是这个表,一个用户对表进行写操作(插入、更新、删除等)要先获得写锁,进行读操作要先获取读锁。它的粒度相对行级锁而言是很大的。加锁消耗资源少,MyISAM和InnoDB都支持。它分为表共享(读)锁、表排他(独占写原创 2021-03-14 11:19:56 · 105 阅读 · 0 评论 -
cpu亲和性
1. 概述CPU亲和性,是指进程在指定的CPU长时间运行,而尽量不向其他CPU迁移。在多核CPU的机器上,每个CPU都有自己的缓存,如果进程不显式的绑定CPU,那么有可能在操作系统的调度下,在不同的CPU之间切换,那么原先CPU上的缓存数据就没什么用了,新CPU上的缓存又没有之前的数据,这就造成了缓存命中率降低。如果设置了CPU亲和性,一个进程绑定了CPU之后,那么缓存的命中率就能保持在一个较高的水平,从而提高程序性能,这就是为什么要设置CPU亲和性的原因。另一个好处是提高特定进程调度的优先级,比如原创 2021-01-14 18:31:46 · 3434 阅读 · 2 评论 -
进程分析工具 pstack pstree strace
当进程卡住不动或者死锁时,pstack可以把当前进程的代码栈打出来,方便我们排查。用法非常简单,后面直接加进程号即可。如果是多线程的,则会打印每个线程的堆栈信息。man pstack 可查看帮助[root@localhost ~]# pstack 7383Thread 8 (Thread 0x7fcc0429c700 (LWP 7384)):#0 0x00007fcc0d322a82 in pthread_cond_timedwait@@GLIBC_2.3.2 () from /lib64/.原创 2020-06-27 12:56:31 · 1284 阅读 · 2 评论