| Great article! I'm looking forward to reading the rest of the series. I noticed a couple details that seem wrong: - You are passing `context` to `log_then_get` and `get`, but you never use it. Perhaps that is left over from a previous version of the post? - In the fiber example you do this inside each fiber: responses << log_then_get(URI(url), Fiber.current)
and this outside each fiber: responses << get_http_fiber(...)
Something is not right there. It raised a few questions for me:- Doesn't this leave `responses` with 8 elements instead of 4? - What does `Fiber.schedule` return anyway? At best it can only be something like a promise, right? It can't be the result of the block. I don't see the answer in the docs: https://ruby-doc.org/3.3.4/Fiber.html#method-c-schedule - When each fiber internally appends to `responses`, it is asynchronous, so are there concurrency problems? Array is not thread-safe I believe. So with fibers is this safe? If so, how/why? (I assume the answer is "because we are using a single-threaded scheduler", but that would be interesting to put in the post.) |