Clojure “(chan n)”和“(chan(buffer n))”之间有什么区别吗?

Clojure “(chan n)”和“(chan(buffer n))”之间有什么区别吗?,clojure,core.async,Clojure,Core.async,正如标题所问,使用时(chan n)和(chan(buffer n))之间有什么区别吗 这个问题源于这样一个想法:我想从数据库中提取消息(是的,我不想使用Kafka或RabbitMQ),并按顺序处理它们 因此,代码段如下所示: (defn处理器[id] (让[ch(chan(buffer 1000))];(chan 1000)或(chan(buffer 1000))? (转到循环[] (当让[msg(!ch msg)]时) ( 在我的测试中,他们的行为没有差别。是的,他们是一样的 您可以随时查看

正如标题所问,使用时
(chan n)
(chan(buffer n))
之间有什么区别吗

这个问题源于这样一个想法:我想从数据库中提取消息(是的,我不想使用Kafka或RabbitMQ),并按顺序处理它们

因此,代码段如下所示:

(defn处理器[id]
(让[ch(chan(buffer 1000))];(chan 1000)或(chan(buffer 1000))?
(转到循环[]
(当让[msg(!ch msg)]时)
(

在我的测试中,他们的行为没有差别。

是的,他们是一样的

您可以随时查看以下内容:


是的,它们是一样的

您可以随时查看以下内容:

(defn chan
  ([] (chan nil))
  ([buf-or-n] (chan buf-or-n nil))
  ([buf-or-n xform] (chan buf-or-n xform nil))
  ([buf-or-n xform ex-handler]
     (channels/chan (if (number? buf-or-n) (buffer buf-or-n) buf-or-n) xform ex-handler)))