gpt4 book ai didi

java - 多核 CPU 上的 logback isDebugEnabled() 速度慢吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:13:54 25 4
gpt4 key购买 nike

我们目前正在为医疗文件开发基于 Scala 和 Akka 集群的产品。代码中有很多

if(logger.isDebugEnabled()) {
logger.debug(expensiveFunction())
}

在我们之前使用标准 SQL/JPA、阻塞 I/O 和大量线程的代码中,这种构造或多或少是免费的。然而,在今天的响应式(Reactive)编程时代,CPU 缓存同步和内存屏障和锁被认为是昂贵的,应该避免。 Logback isDebugEnabled() 是否会导致 volatile 访问并因此导致内存障碍。如果是这样,大量的 logger.isDebugEnabled() 是否会成为潜在的性能 killer ?

有一篇关于 CPU 缓存同步和内存屏障主题的优秀博文: http://mechanical-sympathy.blogspot.se/2013/02/cpu-cache-flushing-fallacy.html

最佳答案

编辑:正如 OP 指出的那样,这段代码来自 Log4J,而不是 Logback。 logback代码可以查看here ,这似乎很复杂(这只是我的意见,但我不喜欢具有方法名称的代码,如 filterAndLog_0_Or3Plus)

如果您检查 source code :

 public boolean isDebugEnabled() {
if(repository.isDisabled( Level.DEBUG_INT))
return false;
return Level.DEBUG.isGreaterOrEqual(this.getEffectiveLevel());
}



public void debug(Object message) {
if(repository.isDisabled(Level.DEBUG_INT))
return;
if(Level.DEBUG.isGreaterOrEqual(this.getEffectiveLevel())) {
forcedLog(FQCN, Level.DEBUG, message, null);
}
}

所以不,你不应该担心性能,因为它无论如何都会被调用,所以在创建字符串之前使用它作为 log.debug(str1 + obj.toString()) 仍然是一个好主意。

关于java - 多核 CPU 上的 logback isDebugEnabled() 速度慢吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23804764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com