27.02.2026 –, Raum Meltdown
In den Nebenläufigkeitsmodellen gibt es Threads, Prozesse, Actors (Golang-Goroutines, Ruby-Ractors), Coroutinen (Ruby Fibers, Haskell Lazy Evaluation). Außerdem gibt es Abstraktions-Libraries wie concurrent-ruby.
Das kann man dann noch mit verschieden Interpretern kreuzen und erhält einen bunten Blumenstrauß von Knieschüssen.
Wir wollen uns die Modelle anschauen und dann mal ganz konkret auf ein Stück Software anwenden:
OpenVox Server ist in einer Mischung aus Clojure und Ruby geschrieben. Beide Sprachen laufen auf der Java-Virtual-Machine (JVM) und bringen einen Moloch von Software zum laufen. Die Frage ist, ob man eine der Sprachen sinnvoll abschütteln kann und ob man es schafft den Interpreter zu wechseln.
Schwerpunkt wechselt von OpenVox auf Nebenläufigkeitskonzepte. Die Beschreibung wurde für einen anderen Talk erarbeitet:
Zwischenspiel: Java-Limits "jvm pain points"
- https://dev.to/betadots/scaling-puppet-infrastructure-3p2o#scaling-beyond-jruby-limits
- max 32 jrubies
- max 2GByte reserved code cache
- memory alloc
Ruby Performance
- JRuby
- MRI
- rvm list known
- maglev - discontinued
- ree - discontinued looong ago
- mruby - C integration
- truffleruby - experimental Java standard foreign function interface - performance bad
- rbx - dead
- jruby - jruby-10 ruby3.1
- mri-3.3, mri-3.4, mri-4.0
- Gem::concurrent
https://github.com/ruby-concurrency/concurrent-ruby/blob/master/lib/concurrent-ruby/concurrent/hash.rb#L17-L23
- Ractors
- Gobal Interpreter Lock
- no shared state
- Threads
- just in time compiler
- jruby
OpenVox Server current architectur
- Clojure - jar, DSL
- Clojars.org library, vgl rubygems.org
- Compiler
- Compile - Templates
- CA-Prozess
- CA-API
- PuppetDB - Exported Resources
- PuppetDB - API
- ENC
OpenVox MRI Architecture
- Multi Process
Bonus:
- Metrics von Server
- Metrics von Agent
Backup:
- Fibers - Enumerator.produce(0).map { _1 + 1} .filter { _1.odd? }.first(10)
Ich lerne seit zwei Jahren für die Arbeit Ruby und habe mich in eine Integrationsaufgabe rein gemischt