Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

📝 Add more examples / uses to the Concurrency section in the documentation guide of Fs2 #3437

Merged
merged 10 commits into from
May 30, 2024

Conversation

Hombre-x
Copy link
Contributor

@Hombre-x Hombre-x commented May 17, 2024

Helps with #1958

What's included:

  • Examples for both parEvalMap and parEvalMapUnordered
  • Reasoning about the three merge variants; it's about when they will halt or not depending on the provided streams
  • Added a concurrently example using a simple producer-consumer environment (Had to use Scala 2 syntax with implicits, I didn't know how to make mdoc work with Scala 3 at the same time 🤔).
  • Changed the previous example to make it suitable for parJoin

Hombre-x added 6 commits May 16, 2024 18:38
Added some examples of `parEvalMap` to the *Concurrency* section in the documentation guide.
Added reasoning about `merge` halting variants and an example of `concurrently` using a producer consumer demo (this example only works in Scala 3)
Added a similar consumer-producer example to the `parJoin` method.
Also mentioned the `parJoinUnbounded` version.
Apparently, `mdoc` does not have a way to distinguish between Scala 2 and Scala 3 AFAIK. So this commit changes the examples in Scala 3 to Scala 2.
The sample routes in the example are actually linked to the project, so I used the testdata/ folder to place some lorem ipsum files.
The previous one had conflict because of previous definitions in the `concurrently` one.

The new example also runs three streams at the same time to differentiate it a bit more from `merge`.
@Hombre-x Hombre-x changed the title 📝 Add more examples / uses to the Concurrency section of the documentation guide of Fs2 📝 Add more examples / uses to the Concurrency section in the documentation guide of Fs2 May 18, 2024
site/guide.md Outdated
Path("sample_file_part3.txt"),
).map(Path("testdata") / _)

def loadFile(path: Path): IO[String] =
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't love this example for a couple of reasons:

  • concurrency not really adding any benefit given all actions are against the file system
  • unnecessarily parses the file contents to a string
  • unnecessarily loads full file contents in memory
  • if those downsides aren't important, then the same thing could be done entirely with IO and without Stream

Here's a full streaming version of this file concat routine that maintains a streaming nature and avoids parsing:

def concat(inPaths: Stream[IO, Path], outPath: Path): Stream[IO, Nothing] =
  inPaths.flatMap(p => Files[IO].readAll(p)).through(Files[IO].writeAll(outPath))

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You are right, I did It just as an excuse to maintain the order of the original stream 🤔 let me thing of a better example!

Hombre-x and others added 4 commits May 22, 2024 16:19
Changed tree 🌳 to three in typo on `merge`

Co-authored-by: Michael Pilquist <mpilquist@gmail.com>
Changed 'optimizations' word from british to american english

Co-authored-by: Michael Pilquist <mpilquist@gmail.com>
Removed unused imports in various examples before `mdoc:reset`

Co-authored-by: Michael Pilquist <mpilquist@gmail.com>
Changed the example as suggested.

Now it does not parse the bytes, nor reads from the filesystem. Instead it downloads some files from The Project Gutenberg and creates an `InputStream` from each one of them.

Co-authored-by: Michael Pilquist <mpilquist@gmail.com>
@Hombre-x
Copy link
Contributor Author

I sometimes forget that GitHub don't usually notifies the commits in PRs, so changes are done @mpilquist!

@mpilquist mpilquist merged commit 2ebcb12 into typelevel:main May 30, 2024
15 checks passed
@mpilquist
Copy link
Member

Thanks!

# for free to join this conversation on GitHub. Already have an account? # to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants