gpt4 book ai didi

clojure - 在 Clojure 中管理资源池的最佳方式

转载 作者:行者123 更新时间:2023-12-04 11:49:33 25 4
gpt4 key购买 nike

我有一个 Web 服务端点,它使用来自 Java 库的可变资源。该 Web 服务端点可以同时接收多个查询。 (端点是使用 Ring/Compojure 实现的)。创建这些资源的成本很高,因此为每个 Web 服务调用重新创建它们是非常低效的。

我想做的是创建一个pool我在 Web 服务启动时填充的资源。然后每次调用端点时,它都会从池中获取一个资源,将其用于处理,然后将其推回池中并等待下一次调用发生。

我想知道在 Clojure 中最好的方法是什么?是否有一个“池”Clojure 库可以帮助我解决这个问题?

我天真地尝试在原子中使用向量来实现它,其中向量的每个项目都是该资源。然而,它很快就知道它不能真正以这种方式工作。

最佳答案

这是基于 Timothy Pratley使用 refs 的想法:

(def pool (ref ['a 'b 'c]))

(defn take' [pool]
(dosync
(let [[h & t] @pool]
(ref-set pool (vec t))
h)))

(defn put [pool x]
(dosync
(alter pool conj x)
nil))

(take' pool) ;; => 'a
(put pool 'a) ;; => nil
(take' pool) ;; => 'a
(take' pool) ;; => 'b
(take' pool) ;; => 'c

也许不是最好的攻击方式。但我喜欢它的简单。

关于clojure - 在 Clojure 中管理资源池的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35048578/

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