From: "byroot (Jean Boussier) via ruby-core" Date: 2026-01-14T07:54:04+00:00 Subject: [ruby-core:124526] [Ruby Feature#21788] Promote Thread::Monitor to a core class Issue #21788 has been updated by byroot (Jean Boussier). > Do you mean it is useful because of recursive mutex? It's very often used as one. In my case I'm interested in speeding it up, to help speedup synchronized constructs such as connection pools, so I need the condition variable. ---------------------------------------- Feature #21788: Promote Thread::Monitor to a core class https://bugs.ruby-lang.org/issues/21788#change-116090 * Author: byroot (Jean Boussier) * Status: Open * Target version: 4.1 ---------------------------------------- `Monitor` is about as useful as `Mutex` and yet one is a core class and the other is a "stdlib" extension. I propose to promote `Thread::Monitor` as a core class convenience. ### The rest of `monitor.rb` The `monitor` stdlib also contains `MonitorMixin`, but I think this part can remain in `lib/monitor.rb` (or even be moved to `lib/monitor_mixin.rb`. One more questionable part is `Monitor#new_cond`, as it returns a `::MonitorMixin::ConditionVariable` so it would also need to remain in the stdlib. ### Performance benefit By being a core class, Monitor can also be implemented more efficiently, as it is no longer constrained to the public C API. On my branch, monitor is approximately 15% faster (but there might be some more optimizations to be found). `master`: ``` ruby 4.0.0dev (2025-12-17T07:16:32Z master 54d3945ee5) +YJIT +PRISM [arm64-darwin25] Warming up -------------------------------------- Mutex 1.952M i/100ms Monitor 1.775M i/100ms Calculating ------------------------------------- Mutex 25.102M (� 0.4%) i/s (39.84 ns/i) - 126.884M in 5.054731s Monitor 21.189M (� 0.1%) i/s (47.19 ns/i) - 106.485M in 5.025493s ``` core monitor: ``` ruby 4.0.0dev (2025-12-17T07:21:34Z core-monitor 32815a1bc4) +YJIT +PRISM [arm64-darwin25] Warming up -------------------------------------- Mutex 1.975M i/100ms Monitor 1.936M i/100ms Calculating ------------------------------------- Mutex 25.213M (� 0.4%) i/s (39.66 ns/i) - 126.407M in 5.013728s Monitor 24.099M (� 0.1%) i/s (41.50 ns/i) - 121.992M in 5.062092s ``` Proposed implementation: https://github.com/ruby/ruby/pull/15538 -- https://bugs.ruby-lang.org/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/