Muduo源码笔记系列:
muduo源码阅读笔记(0、下载编译muduo)
muduo源码阅读笔记(1、同步日志)
muduo源码阅读笔记(2、对C语言原生的线程安全以及同步的API的封装)
muduo源码阅读笔记(3、线程和线程池的封装)
muduo源码阅读笔记(4、异步日志)
muduo源码阅读笔记(5、Channel和Poller)
muduo源码阅读笔记(6、ExevntLoop和Thread)
muduo源码阅读笔记(7、EventLoopThreadPool)
muduo源码阅读笔记(8、定时器TimerQueue)
muduo源码阅读笔记(9、TcpServer)
muduo源码阅读笔记(10、TcpConnection)
前言
Muduo的异步日志支持:异步日志输出,日志回滚。本文重点在异步日志输出,主要集中在AsyncLogging.cc文件的实现,至于日志回滚,属于文件IO管理范畴,不会细讲,这部分的代码主要集中在LogFile.cc、FileUtil.cc文件,代码量也不大,感兴趣的读者可以自行深入阅读。
正文
Muduo异步日志的实现是典型的多对一的,多生产者,单消费者模型。简单来说就是程序中的多个线程(前台线程)产生日志,然后由一个日志同步线程(后台线程)消化日志,将日志同步给磁盘。
术语纠正
阅读过Muduo源码的朋友都应该知道,Muduo实现的异步日志是双缓冲的,但是我阅读过很多Muduo有关异步日志的博客,有的人说Muduo里面双缓冲指的是currentBuffer_和nextBuffer_两块缓存,也有人说,Muduo的双缓冲是指前台的缓存和后台线程的缓存。
查阅资料得知:
定义: 双缓冲技术是一种通过使用两个缓冲区(buffers)来实现某种功能的技术。通常,这两个缓冲区会交替使用,一个用于写入数据,另一个用于读取数据,或者在某种操作完成后进行交换。
在不同的领域中,双缓冲技术有不同的应用,以下是一些常见的应用场景:
图形学: 在图形学中,双缓冲技术通常用于解决图像闪烁的问题。一个缓冲区用于显示当前图像,而另一个缓冲区则用于在后台绘制下一帧图像。当绘制完成后,两个缓冲区进行交换,确保只显示完整的图像,从而避免了闪烁。