每秒百万级高效 C++ 异步日志实践_LeechanXBlog 的博客 - CSDN 博客
异步日志,按我的理解就是主线程的日志打印接口仅负责生产日志数据(作为日志的生产者),而日志的落地( 写入文件 )操作留给另一个后台线程去完成(作为日志的消费者),这是一个典型的生产 - 消费问题,如此一来会使得:
主线程调用日志打印接口成为非阻塞操作,同步的磁盘 IO 从主线程中剥离出来,有助于提高性能
对于异步日志,我们很容易借助队列来一个实现方式:主线程写日志到队列,队列本身使用条件变量、或者管道、eventfd 等通知机制,当有数据入队列就通知消费者线程去消费日志
但是,这样的异步队列也有一定的问题:
- 生产者线程产生 N 个日志,对应后台线程就会被通知 N 次,频繁日志写入会造成一定性能开销
- 不同队列实现方式也各有缺点:
- 用数组实现:空间不足时,队列内存不易拓展
- 用链表实现:每条消息的生产消费都对应内存的创建销毁,有一定开销
gdb官方文档
GDB Documentation (sourceware.org)
gdb 调试过程
要使用 g++ 和 GDB 进行调试,请按照以下步骤操作:
-
编译代码:首先,使用
g++
命令来编译你的代码,并添加-g
选项以生成带有调试符号的可执行文件。例如:1 2 3 4 5
g++ -g your_code.cpp -o your_program // 如果是使用cmake, 在 makelists.txt 加上这两句话 set(CMAKE_BUILD_TYPE DEBUG) add_definitions(-g)
-
启动 GDB:在终端中输入
gdb
命令,然后在 GDB 提示符下启动你的程序,如下所示:1
gdb your_program
-
设置断点:在 GDB 中,你可以使用
break
命令设置断点。例如,要在主函数的第 10 行设置断点,可以键入:1
break main.cpp:10
-
运行程序:输入
run
命令来运行程序。当程序达到断点时,它会停止执行。1
run
-
执行调试命令:一旦程序停止在断点处,你可以使用各种 GDB 命令来检查变量的值、单步执行代码等。
- 使用
next
命令(简写为n
)逐行执行代码,而不进入函数调用。 - 使用
step
命令(简写为s
)进入函数调用并逐行执行函数内部的代码。( 常用 ) - 使用
print
命令(简写为p
)打印变量的值。 - 使用
continue
命令(简写为c
)继续执行程序直到下一个断点。
你还可以使用其他的 GDB 命令进行更高级的调试操作。
- 使用
-
退出 GDB:要退出 GDB,可以使用
quit
命令或按下Ctrl + D
。
以上是使用 g++ 和 GDB 进行调试的基本步骤。你可以根据具体需求和调试情况来使用其他 GDB 命令。
常用命令
|
|