It should be noted that this is a rather poor benchmark, comparing multiprocess SO_REUSEPORT and single process multithreading, as well as no consistent header set. Note that the crystal implementation is outputting about 92 bytes per request, whereas Go put out 142 bytes per request. Also, Go stdlib was tested with different settings then any of the others.
While it's understood that generalized benchmarks will never be representative, it's usually nice to see at least a few different examples (eg; parse/process/return large JSON blob, read objects from a db, do some math).
Regardless, I appreciate the author's taking the time to run these and share.
This is written in a very messy manner. The author clearly had gaps in their expertise, it was pointed to them and they made a mess of stikethroughs and updates. I'd rather people fully explore the areas they intend to write on, instead of mission out fundamentals and coming out with misleading results.
Ugh... not a great article, I don't tend to read micro benchmark articles with baited breath for some nuggets of insight so no surprise really.
WRT Go:
Linux implementation of SO_REUSEPORT initially had a few big gotchas, such as incoming conns could get dropped if one of the multiple listening process terminates. I don't know what the state of affairs is now however it was an eminently sensible position not to support it on Linux way back when.
So fasthttp doesn't really have a good reputation for correctness[1], sacrificing much of the HTTP specs for speed. I can't imagine I'd ever want to use it.
11 comments
[ 4.2 ms ] story [ 35.1 ms ] threadRegardless, I appreciate the author's taking the time to run these and share.
WRT Go:
Linux implementation of SO_REUSEPORT initially had a few big gotchas, such as incoming conns could get dropped if one of the multiple listening process terminates. I don't know what the state of affairs is now however it was an eminently sensible position not to support it on Linux way back when.
So fasthttp doesn't really have a good reputation for correctness[1], sacrificing much of the HTTP specs for speed. I can't imagine I'd ever want to use it.
[1] https://www.reddit.com/r/golang/comments/5w3ang/switching_fr...
https://www.techempower.com/benchmarks/