我正在运行一个clojure应用程序,从kaka流读取数据。我正在使用github项目https://github.com/l1x/shovel 读Kafka的作品。当我使用visualvm分析我的应用程序寻找热点时,我注意到大约70%的cpu时间都花在clojure.core$promise$reify\uu6310.deref函数上。
铲子api使用者是kafka consumergroup api上的ThinRapper。它读取kafka主题并发布到核心异步通道。如果我继续使用这个api,我应该担心我的应用程序延迟会受到影响。有什么解释为什么承诺上的具体化占用了这么多cpu时间。
1条答案
按热度按时间rkue9o1l1#
在clojure,
$
在类的打印表示中用于表示内部类。clojure.core$promise$reify__6310.deref
意味着调用方法deref
在通过reify
作为一个内部阶级clojure.core/promise
. 事实证明,如果你看看promise
,它将显示为内部物化类clojure.core$promise
.一
promise
在clojure中,表示可能还不可用的数据。您可以在repl中看到它的行为:这将挂起并且不给出任何结果,并且不会给出下一个repl提示,直到您
deliver
或中断deref
打电话。时间被花在deref
的promise
简单地说,程序逻辑正在等待尚未计算(或尚未通过网络等)的值。