ZIOのベンチマークを実行してみた

# はじめに

みなさん、ZIO 使ってますか？ 僕は使ってないです。(即堕ち)

普段は Cats Effect を使っているんですが、他の Functional Effect ライブラリも気になっていました。特に ZIO が最近 1.0 がリリースされたということもあって、ちょこちょことドキュメントを読んだりしています。んで、ZIO のサイトを見ていて気付きました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4292/9487c7c6-193e-5464-325a-a37ecc07081b.png)
「**Scala の Future より 100 倍速い！？ ホントかよ！？**」

と思いつつも、

「あれ…そういえば Cats Effect も特にパフォーマンスとか気にせずに使ってるなぁ、便利だし…」

と。途端にパフォーマンスが気になり始めてきたんですが、そこはさすが ZIO、ベンチマークもしっかり整備されていました。ただ、実行結果がググっても見つからなかったので、今回自分で実行してまとめてみます。

# 実行環境

* AWS EC2 `c5.large`
* OpenJDK 11 (Corretto)
* Scala 2.13.1
* ZIO 1.0.1+32-54c3d23e+20200902-2114-SNAPSHOT

```
sbt> ++ 2.13.1
sbt> benchmarks/jmh:run -jvmArgs "-Xss128m -Xmx2g" -f 1 -o result.txt -rff result.csv -wi 3 -i 3 -t 1 .*
```

# 結果

他の Functional Effect ライブラリと比較しているベンチマークだけ抜粋して載せています。

## ArrayFill [(source)](https://github.com/zio/zio/blob/54c3d23e1618198ac7c8a873c053b45abeef5b26/benchmarks/src/main/scala/zio/ArrayFillBenchmark.scala)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4292/0c7fc21a-7462-9aff-31ea-0ce17b5a5209.png)

## BubbleSort [(source)](https://github.com/zio/zio/blob/54c3d23e1618198ac7c8a873c053b45abeef5b26/benchmarks/src/main/scala/zio/BubbleSortBenchmarks.scala)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4292/108ee12c-36b4-6132-a2ef-b9bd300d0138.png)

## IODeepAttempt [(source)](https://github.com/zio/zio/blob/54c3d23e1618198ac7c8a873c053b45abeef5b26/benchmarks/src/main/scala/zio/IODeepAttemptBenchmark.scala)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4292/5f27cc5c-2c0f-3c44-33c9-c46c34b68be7.png)

## IODeepFlatMap [(source)](https://github.com/zio/zio/blob/54c3d23e1618198ac7c8a873c053b45abeef5b26/benchmarks/src/main/scala/zio/IODeepFlatMapBenchmark.scala)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4292/a6b4fe73-b871-bc00-6a2e-a5eb61864f20.png)

## IODeepLeftBind [(source)](https://github.com/zio/zio/blob/54c3d23e1618198ac7c8a873c053b45abeef5b26/benchmarks/src/main/scala/zio/IODeepLeftBindBenchmark.scala)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4292/10663d82-69a2-f847-a78a-36781fa755b4.png)

## IOEmptyRace [(source)](https://github.com/zio/zio/blob/54c3d23e1618198ac7c8a873c053b45abeef5b26/benchmarks/src/main/scala/zio/IOEmptyRaceBenchmark.scala)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4292/ff5011cf-fb37-427a-64e9-99db6eacb0e0.png)

## IOForkInterrupt [(source)](https://github.com/zio/zio/blob/54c3d23e1618198ac7c8a873c053b45abeef5b26/benchmarks/src/main/scala/zio/IOForkInterruptBenchmark.scala)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4292/ff8b317b-fdbe-bfb0-1503-1ac8d8994181.png)

## IOLeftBind [(source)](https://github.com/zio/zio/blob/54c3d23e1618198ac7c8a873c053b45abeef5b26/benchmarks/src/main/scala/zio/IOLeftBindBenchmark.scala)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4292/5b4af82f-9970-5f24-b658-c195faa27192.png)

## IOMap [(source)](https://github.com/zio/zio/blob/54c3d23e1618198ac7c8a873c053b45abeef5b26/benchmarks/src/main/scala/zio/IOMapBenchmark.scala)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4292/71d30f2e-7fbc-db37-9bdb-9747143c0d64.png)

## IONarrowFlatMap [(source)](https://github.com/zio/zio/blob/54c3d23e1618198ac7c8a873c053b45abeef5b26/benchmarks/src/main/scala/zio/IONarrowFlatMapBenchmark.scala)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4292/0bafaf89-2982-c746-2f3b-190ae381bf65.png)

## IOShallowAttempt [(source)](https://github.com/zio/zio/blob/54c3d23e1618198ac7c8a873c053b45abeef5b26/benchmarks/src/main/scala/zio/IOShallowAttemptBenchmark.scala)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4292/95af2b69-ef27-4b54-358e-1792ff4eb766.png)

## ParSequence [(source)](https://github.com/zio/zio/blob/54c3d23e1618198ac7c8a873c053b45abeef5b26/benchmarks/src/main/scala/zio/ParSequenceBenchmark.scala)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4292/6dbc8b23-7ba2-17fe-e18d-9af7fbec4758.png)

## ParallelMergeSort [(source)](https://github.com/zio/zio/blob/54c3d23e1618198ac7c8a873c053b45abeef5b26/benchmarks/src/main/scala/zio/ParallelMergeSortBenchmark.scala)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4292/f0603e06-e060-a682-ccbc-f4c6f61ea481.png)

## QueueBackPressure [(source)](https://github.com/zio/zio/blob/54c3d23e1618198ac7c8a873c053b45abeef5b26/benchmarks/src/main/scala/zio/QueueBackPressureBenchmark.scala)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4292/c310ffec-2f74-b125-e2e1-71b58316d5e6.png)

## QueueParallel [(source)](https://github.com/zio/zio/blob/54c3d23e1618198ac7c8a873c053b45abeef5b26/benchmarks/src/main/scala/zio/QueueParallelBenchmark.scala)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4292/32b511e7-500e-dd5a-0c2f-68c33f8c693a.png)

## QueueSequental [(source)](https://github.com/zio/zio/blob/54c3d23e1618198ac7c8a873c053b45abeef5b26/benchmarks/src/main/scala/zio/QueueSequentialBenchmark.scala)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4292/3a572f93-3908-4629-d1a1-57d572223ec0.png)

## Stream [(source)](https://github.com/zio/zio/blob/54c3d23e1618198ac7c8a873c053b45abeef5b26/benchmarks/src/main/scala/zio/StreamBenchmarks.scala)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4292/fb7c1f65-18b1-df10-8dda-c2166509f7b8.png)

## CSVStream [(source)](https://github.com/zio/zio/blob/54c3d23e1618198ac7c8a873c053b45abeef5b26/benchmarks/src/main/scala/zio/StreamBenchmarks.scala)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4292/15fe5c91-dc07-04e7-fbb7-82dd07992500.png)


# その他

すべてのベンチマーク結果はこちらのスプシにあります。

* [ZIO benchmarks](https://docs.google.com/spreadsheets/d/16CPKFgxSqk-S5nlcbWltgDiquYCe2zTZKk_ihmsmzeY/edit?usp=sharing)
* [実行ログ](https://gist.githubusercontent.com/atty303/10608bfc856258a8bc44ad0b9f68a059/raw/a96b8114c1fab12e0acbba232696a91cfd556fad/zio-bench.txt)

# 最後に

一つ一つ所感のようなものを書こうかと思っていたのですが、結果をまとめただけで力尽きました。
そこは各自、このデータをライブラリ選定の材料にしてもらえれば幸いです。