Previously, calling IO#flush or closing an IO with unflushed buffered writes would just invoke `#blocking_operation_wait` and flush the write buffer using a `write` syscall. This change adds flushing through the fiber scheduler by invoki...ciconia (Sharon Rosner)
escapable character (https://github.com/ruby/erb/pull/87) This change improves reduces allocations and makes `html_escape` ~35% faster in a benchmark with escaped strings taken from the `test_html_escape` test in `test/test_erb.rb`. - ...ciconia (Sharon Rosner)
> I missed some functions in io.c which could invoke read. That's why read was showing up. Sorry, this tripped me up and I was looking for a corresponding `write` line. > ... This seems fine to me, but to play the devil's advocate ...ciconia (Sharon Rosner)
> In my testing, comparing `io_uring` `io_read` and `io_write` operations, perform about 20% worse in practice in my benchmarks. This was surprising to me. My current understanding as to why it's slow is because when we perform `io_read`...ciconia (Sharon Rosner)
> In the uring backend, for read/write operations, set the IO to blocking and then revert it afterwards. Why would you need to revert it? In practically all cases I can think of, you're going to do all I/O for a given fd on the same s...ciconia (Sharon Rosner)
I'm not sure this is a bug, but apparently a change was introduced in Ruby 3.0 that makes sockets non-blocking by default. This change was apparently introduced as part of the work on the [FiberScheduler interface](https://github.com/rub...ciconia (Sharon Rosner)