一个异步日志IO的demo

整理了以下项目中用到的一个异步日志IO的实现,基于以下设计:

1.  使用了一个push队列和一个write队列。主线程往push队列中加数据,写线程从write队列中拿数据写到磁盘

2.  默认情况下write线程处于睡眠

3. 有两种情况会唤醒写线程。

    1) push队列满后,会调用force_write将push队列和write队列交换并唤醒写线程将日志写入磁盘 

    2)如果push队列长时间未满,待定时器触发后,也会切换push和write并唤醒写线程。

    3)每次写线程工作结束前将重置定时器,避免写线程刚刚写完数据定时器又触发导致无效的切换。

 

 

/*
 *  asynchronous log impelmentation
 *  FileName: async_log.cpp
 *  author: sesiria    2021-05-17
 */
#include <signal.h>
#include <pthread.h>
#include <errno.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <queue>
#include <string>
#include <algorithm>


#define TIMER_EVENT	3 // 3second
#define MAX_BUFFER	1000000 // 100

//=========================&
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值