首页 > 其他 > 详细

高效的异步日志

时间:2021-06-27 09:33:46      阅读:20      评论:0      收藏:0      [点我收藏+]

muduo库中高效的异步日志实现主要是用了多缓冲的思想

技术分享图片

 

 

1.在生产者端:

  在构造函数的时候添加了两个变量,分别表示现在的缓冲区和下一个备用的缓冲区

技术分享图片

  在生产者多线程写的时候,先锁住,然后往现在的缓冲区内写,如果缓冲区满,那么将该缓冲区加到buffers中(buffers用来当中间队列的)

然后把备用的缓冲区next取出作为cur缓冲区使用。最后使用条件变量通知后端线程队列不为空。

技术分享图片

 

 

 2.在消费者端

  先创建两个空的缓冲区以及一个最后写文件的缓冲区

  技术分享图片

 

  然后进行加锁并且使用条件变量等待队列不为空(前端向buffers加了数据,且发送了cond_.notify();

这时候把cur全部移动到buffers中,然后在把新申请的newbuffers1移动到cur中作为新的可用cur。最后把buffers全部缓存的数据

和bufferstowrite交换,这样在后面进行文件的写操作时,对buffertowrite进行操作不会影响buffers,那么就可以不进行加锁,就可以很

高效的进行文件的写入。

 技术分享图片

3.如何处理前端写入队列太快问题

如果bufferstowirte的size超过25,表示buffers接收了太多的日志,且还没有来得及处理,那么就丢掉多余的日志

只剩两个buffer,然后把buffertowrite中的所有的buffer写入到output中,最后把buffertowrite中的前两个空间给newbuffer1和newbuffer2

技术分享图片

 

高效的异步日志

原文:https://www.cnblogs.com/hxl-learning-space/p/14939465.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!