Skip to content

Instantly share code, notes, and snippets.

@mkows
Last active August 4, 2016 16:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mkows/a9d5bb36d74e91591b13198239699851 to your computer and use it in GitHub Desktop.
Save mkows/a9d5bb36d74e91591b13198239699851 to your computer and use it in GitHub Desktop.
fs2 big-bang vs sequential processing of Seq
object Fs2GuideApp extends App {
import fs2.Stream
import fs2.Task
def printTask(i: Int): Task[Boolean] = {
Task.delay {
println(s"started: $i")
Thread.sleep(200)
println(s"ended__: $i")
true
}
}
val input = (1 to 20).toList
val x = Stream.emits(input).map { i => // compare with -> val x = Stream.emits(input).unchunk.map { i =>
printTask(i).map {
case res if i < 3 => !res
case res if i >= 3 => res
}
}.flatMap(Stream.eval)
val res = x.runLog.unsafeRun()
println(s"res = $res")
}
@mkows
Copy link
Author

mkows commented Aug 4, 2016

  • big bang gives:
started: 1
started: 2
started: 4
started: 3
started: 5
started: 6
started: 7
started: 8
ended__: 1
ended__: 4
ended__: 8
ended__: 7
ended__: 6
ended__: 2
ended__: 3
ended__: 5
started: 14
started: 13
started: 12
started: 11
  • sequential (with unchunk):
started: 1
ended__: 1
started: 2
ended__: 2
started: 3
ended__: 3
started: 4
ended__: 4
started: 5
ended__: 5
started: 6
ended__: 6
started: 7
ended__: 7
started: 8
ended__: 8
started: 9
ended__: 9
started: 10
ended__: 10
...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment