异步log“丢失“之谜

   前段时间,需要修复线上数据,于是写了类似这样一个程序:


func main(){
	
	for i := 0; i < 10000000; i++ {
		// fix users' data
		log.Infof("fix details")
        totalInfo += "xxx"
	}
 
    log.Infof("total info is %s", totalInfo)  // 太长了
	return
}

   结果,在进程执行完毕后(用ps确认了),没看到最后一行那个log.  非常纳闷, 以为是中途哪一步卡住了。

     然后,半分钟后, 文件中终于有最后那行log了。 原来, 在刷磁盘呢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SPDLOG是一个C++中的快速异步日志库,它可以帮助开发者实现高效的日志记录。在SPDLOG中,异步模式是在日志记录过程中将日志消息放入一个队列中,由另一个线程负责将消息写入磁盘。因此,异步模式对实时性有一定的影响。 首先,异步模式通过将日志消息放入队列中,可以避免频繁的磁盘写入,提高了程序的性能和响应速度。当应用程序需要处理大量日志消息时,异步模式可以将写入操作集中在一个线程中,减少了IO操作的开销,提高了程序的吞吐量。 然而,由于异步模式将日志消息放入队列中并延迟写入操作,会导致一定的延迟。这意味着在某些情况下,日志消息可能不会立即写入磁盘,而是稍后的某个时间点才会写入。因此,如果实时性对于应用程序至关重要,那么异步模式可能会对实时性产生一定的影响。 为了平衡性能和实时性的需求,SPDLOG提供了几种日志记录模式,包括同步、异步和分阶段模式。同步模式下,日志消息会立即写入磁盘,保证了最高的实时性,但性能可能会受到影响。而分阶段模式则是在同步和异步模式之间取得了折中,允许在一定的时间间隔内将消息写入磁盘,以提高性能并在一定程度上保持实时性。 总的来说,SPDLOG的异步模式对实时性有一定的影响,但通过选择合适的日志记录模式,可以在性能和实时性之间进行权衡,以满足应用程序的需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值