当前位置: 代码迷 >> 综合 >> 一个异步日志IO的demo
  详细解决方案

一个异步日志IO的demo

热度:95   发布时间:2024-01-20 02:00:14.0

整理了以下项目中用到的一个异步日志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//=========================&
  相关解决方案