Sign in

Joshua Young

@joshuay03.bsky.social
171 followers 141 following 56 posts

Senior Software Engineer at Buildkite, OSS contributor, Rails Issues team member, Puma and Concurrent Ruby maintainer, and RubyGems on-call volunteer.

PostsRepliesMedia
Joshua Young @joshuay03.bsky.social · 22/05/2026
It's live: - github.com/joshuay03/ra... - rubygems.org/gems/raptor (Still so much work to do...)
github.com
GitHub - joshuay03/raptor: A high-performance Ruby web server (rawr 🦖)
A high-performance Ruby web server (rawr 🦖). Contribute to joshuay03/raptor development by creating an account on GitHub.
040
Joshua Young @joshuay03.bsky.social · 17/02/2026
Congrats! See you there!
010
Reposted by Joshua Young
Benoit Daloze @eregon.me · 13/12/2025
concurrent-ruby 1.3.6 is released: github.com/ruby-concurr... It automatically prunes unused threads of a thread pool even when no new work is queued, migrates away from the deprecated "non-typed data" C API and includes several bug fixes.
github.com
Release v1.3.6 · ruby-concurrency/concurrent-ruby
What's Changed Run tests without the C extension in CI by @eregon in #1081 Fix typo in Promise docs by @danieldiekmeier in #1083 Correct word in readme by @wwahammy in #1084 Fix mistakes in MVar d...
051
Reposted by Joshua Young
Aaron Patterson @tenderlove.dev · 13/12/2025
One thing I'm really excited about in Ruby 4.0 is that object allocation is going to get a nice speed boost
Screenshot of a terminal demonstrating object allocation speedup. Ruby 4.0 is about 2x faster
38810
Joshua Young @joshuay03.bsky.social · 12/11/2025
Awesome stuff! 🙌🏽
020
Joshua Young @joshuay03.bsky.social · 11/11/2025
Congrats! 🙌🏽
020
Joshua Young @joshuay03.bsky.social · 10/11/2025
One last thing I should mention. This doesn't require that your app be ractor safe. The goal is to offload suitable work (just one task for now, I have ideas for at least one more) within the web server itself to ractors, so you can benefit from them without any changes to your app. 5/5
010
Joshua Young @joshuay03.bsky.social · 10/11/2025
I also need to stop posting stuff like this when it's late for me 😅 I'll come back to answer any questions in the morning. I don't want to divulge too much, especially cause there's a lot more testing I need to do, which could result in major changes before I make it public 🤷🏽‍♂️ 4/5
100
Joshua Young @joshuay03.bsky.social · 10/11/2025
While being inspired by it, I'm making a few design decisions different to Puma that seem to be working out. I won't go into detail yet, but I'll document them eventually. The obvious one is utilising ractors (I'm sure you could guess what for), which Puma should probably also do at some point. 3/5
100
Joshua Young @joshuay03.bsky.social · 10/11/2025
Soooo many disclaimers: - not a 1:1 comparison, just as close as I could get it for a benchmark baseline - not a competition, just showing off an exciting experimental working PoC - just a micro (but not trivial) benchmark using a toy app - the RHS isn't 100% rack compliant, maybe 60ish% - etc. 2/5
100
Joshua Young @joshuay03.bsky.social · 10/11/2025
I really shouldn't be sharing teasers given how much work's left to do, and the good chance that this becomes another forgotten experiment, but I'm pretty happy with how far I got with barely any tuning (compared to the 20-year battle-tested Puma, which I've taken some inspiration from <3). 1/5
141
Joshua Young @joshuay03.bsky.social · 07/11/2025
Thank you!
040
Joshua Young @joshuay03.bsky.social · 01/11/2025
Ah it has `#<<`, but hasn't aliased it to `#send`: github.com/eregon/racto... Also, probably doesn't matter, but it's the other way around in CRuby i.e., `#<<` is the alias.
github.com
ractor-shim/lib/ractor/shim.rb at 69d4d568fdac3f212de3e7d7c3133f31564dc4ec · eregon/ractor-shim
A shim to define Ractor by using Thread, if not already defined - eregon/ractor-shim
100
Joshua Young @joshuay03.bsky.social · 01/11/2025
Has ractor-shim implemented `Ractor::Port#send`? That could be why if not. Ref: docs.ruby-lang.org/en/master/Ra...
docs.ruby-lang.org
class Ractor::Port - Documentation for Ruby 3.5
class Ractor::Port: Port objects transmit messages between Ractors.
100
Joshua Young @joshuay03.bsky.social · 01/11/2025
github.com/joshuay03/at...
github.com
Release v0.8.0 · joshuay03/atomic-ruby
Fix Ractor safety by @jhawthorn in #1 Make ArgumentError messages consistent Implement write barriers for Atom by @byroot in #2 New Contributors @byroot made their first contribution in #2 @jhawt...
020
Joshua Young @joshuay03.bsky.social · 31/10/2025
I don't have an answer, but I'm figuring that out myself with what I'm building (not ready to share yet). There's a point where the copying/moving/freezing (i.e., message passing) overhead might outweigh the parallelisation benefits. The answer will vary by the payload and the type of work.
020
Joshua Young @joshuay03.bsky.social · 31/10/2025
Yes! I missed that. Clearly my Ractor coverage is lacking... @jhawthorn.com has already sent a fix: github.com/joshuay03/at.... I'll get that merged and released soon.
github.com
Fix Ractor safety by jhawthorn · Pull Request #1 · joshuay03/atomic-ruby
Unshareable objects can&#39;t be sent to ractors as today these objects are unsafe to concurrently modify. In the future (under Ractor-local GC) this will be even more broken and reading from the o...
110
Joshua Young @joshuay03.bsky.social · 30/10/2025
2. The thing that clicked for me was when @jhawthorn.com referred to a ractor as a no-GVL block at Rails World. Rather than chucking a whole Rails app in there, you could find CPU intensive code paths that would choke the GVL, and delegate them to a ractor or few. Think complex parsing of strings.
030
Joshua Young @joshuay03.bsky.social · 30/10/2025
1. Could you clarify? I'm not aware of Ractors needing a C extension to work. Main limitation: C extension gems must mark themselves Ractor-safe. Shareable requirement on init/send exists, plus new semantics like move (may not last: bsky.app/profile/byro...). Docs: docs.ruby-lang.org/en/master/ra...
docs.ruby-lang.org
ractor - Documentation for Ruby 3.5
ractor: Ractor - Ruby's Actor-like concurrent abstraction Ractor is designed to provide a parallel execution feature of Ruby without thread-safety concerns.
200
Joshua Young @joshuay03.bsky.social · 29/10/2025
Announcing RactorPool: github.com/joshuay03/ra... Extracted from a project I'm building with Ractors. Currently requires Ruby 3.5 (3.5.0.dev). Goal is to have it stable for Ruby 4.0, when Ractors will be less experimental 🤞🏽
github.com
GitHub - joshuay03/ractor-pool: A thread-safe, lock-free pool of Ractor workers with a coordinator pattern for distributing work
A thread-safe, lock-free pool of Ractor workers with a coordinator pattern for distributing work - joshuay03/ractor-pool
2233
Joshua Young @joshuay03.bsky.social · 25/10/2025
Ah that’s unfortunate, that does seem like a tricky edge case… Being able to move in my case seems to be quite a bit more performant than both deeply copying (not surprising), and making shareable and duping just the objects I need to mutate in the receiver. Although, I haven’t properly benchmarked.
100
Joshua Young @joshuay03.bsky.social · 25/10/2025
I'm building something with Ractors and found a bug. Tried my best™️ to fix it: github.com/ruby/ruby/pu... Side note: Might just be me, but as a non-frequent contributor, building ruby/ruby and running tests seems to be much more convenient and efficient than it was a couple years ago.
github.com
Fix segfault when moving nested objects between ractors during GC by joshuay03 · Pull Request #14947 · ruby/ruby
Fixes a segmentation fault when moving nested objects between ractors with GC stress enabled and YJIT. The issue appears to be a timing problem in the ractor move process. When moving objects, move...
160
Joshua Young @joshuay03.bsky.social · 07/10/2025
Time for a holiday?
010
Joshua Young @joshuay03.bsky.social · 29/09/2025
September flew by pretty quickly… I kicked it off by attending #RailsWorld! www.linkedin.com/posts/joshua...
linkedin.com
#railsworld | 🍯 Joshua Young
Attended the third edition of Rails World earlier this month along with Jason and Julián, back in Amsterdam once again! A big thank you to Buildkite for sponsoring the three of us to attend this year....
040
Joshua Young @joshuay03.bsky.social · 22/09/2025
Was it the colonoscopy room?
120
Joshua Young @joshuay03.bsky.social · 22/09/2025
I’ve added support for distributed deployments: github.com/joshuay03/di... Couple of ideas to follow up on: - Profile dashboard - Profile comparisons
github.com
Release v0.5.0 · joshuay03/dial
Add storage interface with Redis cluster and Memcached adapters for distributed deployments
010
Joshua Young @joshuay03.bsky.social · 31/08/2025
This is from a Datadog APM notebook I used to monitor the impact.
100
Joshua Young @joshuay03.bsky.social · 30/08/2025
Haha yep, I have to remind myself from time to time as well.
000
Joshua Young @joshuay03.bsky.social · 30/08/2025
Yes, at the very end of a before_fork—after doing any necessary closing of connections, shutting down threads, etc.
110
Joshua Young @joshuay03.bsky.social · 30/08/2025
Satisfying memory and CPU improvements after enabling Puma preloading + Process.warmup on one of Buildkite's services (our agent shard). Just rolled this out to all services - keen to see the broader impact!
3193
Joshua Young @joshuay03.bsky.social · 19/08/2025
It probably hasn’t been released yet. I would first check if the change has been back-ported to the `8-0-stable` branch, and then whether it was actually included in a release. If not, and it’s already on the branch, it’ll probably be released in a 8.0.x at some point, else 8.1.x.
110
Joshua Young @joshuay03.bsky.social · 09/08/2025
What a run! Hope you enjoy some well deserved time off!
010
Joshua Young @joshuay03.bsky.social · 05/08/2025
> I believe `Rack::Timeout` does trigger a full process shutdown after killing a thread. You need to opt in by enabling `term_on_timeout` (github.com/zombocom/rac...).
github.com
Allow sending SIGTERM to workers on timeout by schneems · Pull Request #157 · zombocom/rack-timeout
When rack-timeout fires then it can put an application in a &quot;bad&quot; state. This is due to https://www.schneems.com/2017/02/21/the-oldest-bug-in-ruby-why-racktimeout-might-hose-your-server/....
110
Joshua Young @joshuay03.bsky.social · 26/07/2025
TIL 👀 Thanks!
000
Joshua Young @joshuay03.bsky.social · 26/07/2025
Yes, just 3-12 bytes: - github.com/puma/puma/bl... - github.com/puma/puma/bl... Good point, mmap + polling + small messages is probably less efficient than using pipes in this case. I'm still going to give it a go to scratch that itch 😊
020
Joshua Young @joshuay03.bsky.social · 26/07/2025
I’m curious how Puma would perform with mmap instead of pipes, which it relies on heavily for IPC in cluster mode: github.com/puma/puma/bl....
210
Joshua Young @joshuay03.bsky.social · 26/07/2025
I wrote (or rewrote) some gems to get better at Ruby C extensions and learn about these topics (CAS and mmap): - github.com/joshuay03/at... - github.com/joshuay03/mm...
120
Joshua Young @joshuay03.bsky.social · 13/06/2025
I'm curious about this too. With YJIT in maintenance mode, bug fixes, UX improvements, etc., are probably welcome (a colleague recently found and fixed one). But with ZJIT being greenfield WIP, I'm not so sure. Completely understandable if that's the case though.
100
Joshua Young @joshuay03.bsky.social · 10/05/2025
Young* 🙂
120
Joshua Young @joshuay03.bsky.social · 05/05/2025
Had a blast at #RubyKaigi 2025! www.linkedin.com/posts/joshua...
linkedin.com
#rubykaigi | 🍯 Joshua Young
Ruby friends, old and new, at #RubyKaigi 2025—another amazing edition of the largest and most prestigious Ruby conference. I love this community and this event, and hope to be back every year ❤️ Hug...
030
Joshua Young @joshuay03.bsky.social · 01/05/2025
Great talk! Though my favorite is still the one you gave at RailsConf 2022. As a noob OSS contributor and maintainer, I’ve learned a lot from your talks about the "duties" and "responsibilities" of both sides in OSS interactions—I’m trying to apply those principles in my own work as well.
010
Reposted by Joshua Young
Vipul A M @vipulnsward.com · 16/04/2025
#RubyKaigi late night with #RubyFriends !
031
Joshua Young @joshuay03.bsky.social · 10/04/2025
It's not perfect but it does the job! Please let me know how you go if you give it a whirl. So far I've tried it on three Rails monoliths of decent scale (including Buildkite's), and it gives me everything I need to profile requests in a multithreaded development environment - both Ruby and IO.
000
Joshua Young @joshuay03.bsky.social · 10/04/2025
My current focus is production support. I'm also hoping to add support for a few more useful AS notification events: github.com/jhawthorn/ve... Then, I'd like to start thinking about adding some custom hooks to integrate with other gems.
github.com
Add more ActiveSupport notification event markers by joshuay03 · Pull Request #119 · jhawthorn/vernier
WIP New comprehensive list: # ActiveRecord sql.active_record instantiation.active_record start_transaction.active_record (added) transaction.active_record (added) # ActionController start_proces...
100
Joshua Young @joshuay03.bsky.social · 10/04/2025
With Dial, Vernier does all the heavy lifting, and viewing a request profile is just a click away. The hook into AS notifications is simple yet powerful, giving you a useful timeline of the events that matter. I've included N+1 detection and VM stat diffs to complement these, open to more ideas.
100
Joshua Young @joshuay03.bsky.social · 10/04/2025
Announcing Dial, a Rails application profiler: github.com/joshuay03/dial I've longed for a free tool that provides Datadog-like profiles, with accurate GVL and GC activity. Thanks to @jhawthorn.com's amazing work on Vernier, all I needed to do was integrate it with Rails and let it do its thing.
github.com
GitHub - joshuay03/dial: A modern profiler for your Rails application
A modern profiler for your Rails application. Contribute to joshuay03/dial development by creating an account on GitHub.
23310
Joshua Young @joshuay03.bsky.social · 09/04/2025
FYI the year on the post is 2022.
110
Joshua Young @joshuay03.bsky.social · 22/03/2025
See you at RubyKaigi!
130
Joshua Young @joshuay03.bsky.social · 10/03/2025
Makes sense, thank you for clarifying.
000
Joshua Young @joshuay03.bsky.social · 09/03/2025
Sorry, I wasn't clear. If 8/10 threads are ~75% IO bound but with a reasonable spread e.g. query -> serialise, cache -> serialise etc., the CPU bound thread(s) will be interrupted quite often as they interleave. Is that something to be concerned about?
100