Hello! I'm trying to use core.async to wrap nodejs callback based API into channels. To measure core.async overhead I have created a simple benchmark, located here: https://github.com/matklad/asyncbench.
The problem is, I can't really explain benchmark's results. The benchmark is simple: sum numbers from 1 to N, invoking each summation step as a callback after a certain delay. JavaScript and ClojureScript callback-based versions are straight forward (although in cljs version local mutabels via singleton arrays are used). For core.async version, callback just writes result to async/chan, which is read from in a go-loop block. If delay is done via setTimeout or via nodejs nanotimer, I get similar results for JavaScript, ClojureScript callbacks and for ColureScript core.async, like this (N = 2000 numbers, 100 microsecond delay): JavaScript x 4.79 ops/sec ClojureScript callbacks x 4.71 ops/sec ClojureScript async x 4.36 ops/sec If instead the delay is just process.nextTick, core.async lags behind: JavaScript x 443 ops/sec ClojureScript callbacks x 316 ops/sec ClojureScript async x 37.79 ops/sec Is this performance drop due to core.async overhead? Or is it some peculiarity of how core.async uses node event loop? My initial guess was that core.async schedules itself with some delay, however it does use node's process.nextTick/setImmediate. What's even more surprising is that when the delay is really tiny (say, 10 nanoseconds), core.async becomes faster then with a nextTick delay, like this (N = 1000): nextTick: ClojureScript callbacks x 418 ops/sec ClojureScript async x 67.47 ops/sec 10ns delay: ClojureScript callbacks x 111 ops/sec ClojureScript async x 141 ops/sec So, how this figures can be explained? -- Note that posts from new members are moderated - please be patient with your first post. --- You received this message because you are subscribed to the Google Groups "ClojureScript" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/clojurescript.
