scala fs2中的理想块表示生产中的性能提升

时间:2018-04-17 00:16:25

标签: scala java-stream scalaz scalaz-stream fs2

想知道scala fs2 stream中块大小的增加是否会带来性能提升?

    import cats.effect.{IO, Sync}
import fs2.{io, text}
import java.nio.file.Paths

def fahrenheitToCelsius(f: Double): Double =
  (f - 32.0) * (5.0/9.0)

def converter[F[_]](implicit F: Sync[F]): F[Unit] =
  io.file.readAll[F](Paths.get("testdata/fahrenheit.txt"), 4096)
    .through(text.utf8Decode)
    .through(text.lines)
    .filter(s => !s.trim.isEmpty && !s.startsWith("//"))
    .map(line => fahrenheitToCelsius(line.toDouble).toString)
    .intersperse("\n")
    .through(text.utf8Encode)
    .through(io.file.writeAll(Paths.get("testdata/celsius.txt")))
    .compile.drain

// at the end of the universe...
val u: Unit = converter[IO].unsafeRunSync()

1 个答案:

答案 0 :(得分:1)

此块大小只是从文件系统读取文件内容时使用的缓冲区大小。所以你的问题等同于"在读取文件时会增加缓冲区大小会带来性能提升吗?"。

此问题是特定于操作系统/硬件的。大多数情况下的简短回答 - 4K就足够了。