@hackage concurrency-benchmarks0.1.0

Benchmarks to compare concurrency APIs

concurrency-benchmarks

Hackage Build Status Windows Build status

Benchmarks to compare the pure concurrency overhead of various flavors of concurrent streamly streams and the async package.

Use cabal new-bench or stack bench to run the benchmarks. To generate charts, run the benchmarks with --csv-raw=results.csv option and then run makecharts results.csv. Charts are generated in the charts directory.

Methodology

A total of 100,000 tasks are run for each concurrency mechanism being compared. Each task is a noop i.e. it does nothing, just returns. Therefore the benchmark measures the pure overhead of concurrency for the tiniest possible tasks.

Streamly's async and ahead style streams may automatically run the tasks in less number of threads than the actual number of tasks i.e. they may run multiple tasks per thread, if the tasks do not block and have a very low latency. Therefore these streams are much faster on this benchmark. However, the streamly parallel style stream guarantees that each task runs in a separate thread however small it is. For the async package, mapConcurrently_ is used, which runs the tasks but does not collect the results.

Results

These charts compare the streamly master branch and async-2.2.1 on a MacBook Pro with a 2.2 GHz Intel Core i7 processor.

This chart shows the time taken for the benchmark completion.

Comparison of time

This chart shows the maximum rss (resident set size), in other words peak memory consumed during the benchmark run.

Comparison of maxrss

Feedback

Feedback is welcome. Please raise an issue, send a PR or send an email to the author.