/ / Welche praktischen Auswirkungen haben verschiedene Ruby-Threading-Modelle (Ruby vs JRuby) auf Ihren Code als Entwickler? - Ruby, Multithreading, Ruby

Welche praktische Auswirkung haben verschiedene Ruby-Threading-Modelle (Ruby vs JRuby) auf Ihren Code als Entwickler? - Ruby, Multithreading, Jruby

Ich versuche die praktischen Auswirkungen verschiedener Threading - Modelle zwischen MRI Ruby 1.8 und JRuby zu verstehen.

Was bedeutet dieser Unterschied für mich als Entwickler?

Und gibt es in MRI Ruby 1.8 auch einige praktische Codebeispiele, die aufgrund unterschiedlicher Threading-Modelle schlechtere Leistungseigenschaften für JRuby aufweisen?

Antworten:

11 für die Antwort № 1

Zustand

  • ruby 1.8 hat grüne Threads, diese lassen sich schnell erstellen / löschen (als Objekte), werden aber nicht wirklich parallel ausgeführt und werden nicht einmal vom Betriebssystem, sondern von der virtuellen Maschine geplant
  • Rubin 1.9 hat echte Threads, die aufgrund von OS-Aufrufen nur langsam erstellt / gelöscht werden (als Objekte), aber aufgrund der GIL (Global Interpreter Lock), die nur die gleichzeitige Ausführung eines Threads zulässt, sind diese nicht wirklich parallel
  • JRuby hat auch echte Threads vom Betriebssystem geplant und sind wirklich gleichzeitig

Fazit

Ein Thread-Programm, das auf einer 2-Kern-CPU ausgeführt wird, läuft unter JRuby schneller als die anderen Implementierungen, was den Threading-Gesichtspunkt betrifft

Beachten!

Viele existierende Ruby-Bibliotheken sind nicht threadsicher, so dass der Vorteil von JRuby in vielen Fällen unbrauchbar wird.
Beachten Sie auch, dass viele Techniken der Ruby-Programmierung (z. B. Klassenvariablen) zusätzlichen Programmieraufwand erfordern, um die Thread-Sicherheit (Mutex-Sperren, Monitore usw.) sicherzustellen, wenn Threads verwendet werden sollen.


6 für die Antwort № 2

Die Threads von JRuby sind systemeigene ThreadsSie bieten alle Vorteile der Thread-Programmierung (einschließlich der Verwendung mehrerer Prozessorkerne, falls zutreffend). Ruby verfügt jedoch über eine globale Interpretersperre (GIL), die verhindert, dass mehrere Threads gleichzeitig ausgeführt werden. Der einzige wirkliche Leistungsunterschied ist die Tatsache, dass Ihre MRI / YARV Ruby-Anwendungen nicht alle Prozessorkerne nutzen können, Ihre JRuby-Anwendungen dies jedoch gerne tun.

Wenn dies jedoch kein Problem ist, sind MRT-Threads (theoretisch habe ich das nicht getestet) etwas schneller, weil sie es sind grüne Fäden, die weniger Systemressourcen verbrauchen. YARV (Ruby 1.9) verwendet native Systemthreads.


3 für die Antwort № 3

Ich bin ein regelmäßiger JRuby-Benutzer und der größteDer Unterschied ist, dass JRuby-Threads wirklich gleichzeitig ablaufen. Eigentlich handelt es sich um Threads auf Systemebene, sodass sie gleichzeitig auf mehreren Kernen ausgeführt werden können. Ich kenne keinen Ort, an dem MRI Ruby 1.8-Code auf JRuby langsamer läuft. Sie können diese Frage prüfen Hat Ruby echtes Multithreading?.