Welchen praktischen Effekt haben verschiedene Ruby-Threading-Modelle (Ruby vs JRuby) auf Ihren Code als Entwickler?

7

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

Was bedeutet dieser Unterschied für mich als Entwickler?

Und gibt es auch praktische Beispiele für Code in MRI Ruby 1.8, die aufgrund verschiedener Threading-Modelle schlechtere Leistungsmerkmale auf JRuby haben werden?

    
Charles Bain 16.06.2009, 03:46
quelle

3 Antworten

11

Status

  • ruby ​​1.8 hat grüne Threads, die schnell erstellt / gelöscht werden können (als Objekte), aber nicht wirklich parallel ausgeführt werden und nicht einmal vom Betriebssystem geplant werden, sondern von der virtuellen Maschine
  • ruby ​​1.9 hat echte Threads, diese sind aufgrund von OS-Aufrufen langsam zu erstellen / löschen (als Objekte), aber wegen der GIL (globale Interpreter-Sperre), die nur einen Thread gleichzeitig ausführen kann, sind dies beide nicht parallel
  • JRuby hat auch echte Threads, die vom Betriebssystem geplant werden, und sind wirklich gleichzeitig

Fazit

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

Beachte!

Viele bestehende Ruby-Bibliotheken sind nicht threadsicher, so dass der Vorteil von JRuby in vielen Fällen nutzlos ist.
Beachten Sie auch, dass viele Techniken der Ruby-Programmierung (z. B. Klassenvars) zusätzlichen Programmieraufwand benötigen, um die Thread-Sicherheit (Mutex-Sperren, Monitore usw.) zu gewährleisten, wenn Threads verwendet werden sollen.

    
clyfe 03.03.2010 15:29
quelle
6

JRubys Threads sind native Systemthreads und bieten Ihnen 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 in der Lage sein werden, alle Ihre Prozessorkerne zu nutzen, aber Ihre JRuby-Anwendungen werden dies gerne tun.

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

    
Sasha Chedygov 16.06.2009 03:56
quelle
3

Ich bin ein normaler JRuby-Benutzer und der größte Unterschied ist, dass JRuby-Threads wirklich gleichzeitig sind. Sie sind tatsächlich Threads auf Systemebene, sodass sie gleichzeitig auf mehreren Kernen ausgeführt werden können. Ich kenne keinen Ort, wo MRI Ruby 1.8-Code auf JRuby langsamer läuft. Sie können sich diese Frage vielleicht einmal ansehen Hat Ruby echtes Multithreading? .

    
Josh Moore 16.06.2009 03:50
quelle

Tags und Links