This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2015-09-03
Channels
- # admin-announcements (241)
- # beginners (53)
- # boot (134)
- # cider (20)
- # clara (3)
- # clojure (170)
- # clojure-argentina (13)
- # clojure-brasil (1)
- # clojure-canada (3)
- # clojure-italy (9)
- # clojure-nl (3)
- # clojure-russia (55)
- # clojurescript (115)
- # code-reviews (18)
- # cursive (8)
- # datomic (14)
- # events (8)
- # hoplon (51)
- # immutant (38)
- # jobs (8)
- # ldnclj (11)
- # melbourne (6)
- # off-topic (2)
- # om (5)
- # onyx (9)
- # re-frame (3)
- # reagent (8)
- # sneer-br (1)
- # sydney (1)
- # testing (14)
ya entendí lo que pasó con el async/put!
ayer usando el chan con buffer... async/put!
es asíncrono, y si no hay espacio en el buffer los puts se acumulan en un "puts bufffer" que está limitado a 1024 items... esto es en el FixedBuffer, que es el default... usando (chan (sliding-buffer 2))
(o dropping-buffer
) entonces simplemente se descarta alguno de los mensajes para hacer lugar
Ante la pregunta de "entonces para qué sirve el buffer?", la respuesta es async/>!!
que es como put (intenta agregar un mensaje al chan) pero bloquea si el buffer está full:
Usage: (>!! port val)
puts a val into port. nil values are not allowed. Will block if no
buffer space is available. Returns true unless port is already closed.
una referencia a lo de "buffered puts" y el límite de 1024: https://groups.google.com/d/msg/clojure/NIPIzJ7l6RA/QEiIRAk7TgoJ
Una buena respuesta de Stuart Sierra en SO: http://stackoverflow.com/a/24955514/1389573