/ / Quale effetto pratico avranno diversi modelli di threading Ruby (Ruby vs JRuby) sul tuo codice come sviluppatore? - rubino, multithreading, jruby

Quale effetto pratico avranno diversi modelli di threading Ruby (Ruby vs JRuby) sul tuo codice come sviluppatore? - rubino, multithreading, jruby

Sto cercando di capire l'impatto pratico dei diversi modelli di threading tra MRI Ruby 1.8 e JRuby.

Cosa significa questa differenza per me come sviluppatore?

E inoltre, ci sono esempi pratici di codice in MRI Ruby 1.8 che avranno caratteristiche di performance peggiori su JRuby a causa di diversi modelli di threading?

risposte:

11 per risposta № 1

Stato

  • ruby 1.8 ha thread verdi, questi sono veloci da creare / eliminare (come oggetti) ma non vengono eseguiti veramente in parallelo e non sono nemmeno pianificati dal sistema operativo ma dalla macchina virtuale
  • rubino 1.9 ha thread reali, questi sono lenti da creare / eliminare (come oggetti) a causa delle chiamate del sistema operativo, ma a causa del GIL (global interpreter lock) che consente l'esecuzione di un solo thread alla volta, né questi sono realmente paralleli
  • JRuby ha anche thread reali programmati dal sistema operativo e sono concomitanti

Conclusione

Un programma con thread in esecuzione su una CPU a 2 core verrà eseguito più rapidamente su JRuby, quindi sulle altre implementazioni, per quanto riguarda il punto di vista del threading

Avviso!

Molte librerie di rubini esistenti non sono thread-safe quindi il vantaggio di JRuby in molte volte inutile.
Si noti inoltre che molte tecniche di programmazione di ruby ​​(ad esempio class vars) richiedono uno sforzo di programmazione aggiuntivo per garantire la sicurezza del thread (lock mutex, monitor ecc.) Se si utilizzano thread.


6 per risposta № 2

I thread di JRuby sono thread di sistema nativi, quinditi offrono tutti i vantaggi della programmazione in thread (compreso l'uso di più core del processore, se applicabile). Tuttavia, Ruby ha un Global Interpreter Lock (GIL), che impedisce l'esecuzione simultanea di più thread. Quindi l'unica vera differenza di prestazioni è il fatto che le tue applicazioni Ruby MRI / YARV non saranno in grado di utilizzare tutti i core del processore, ma le tue applicazioni JRuby lo faranno felicemente.

Tuttavia, se questo non è un problema, i thread della risonanza magnetica sono (teoricamente, non ho provato questo) un po 'più veloce perché sono fili verdi, che utilizzano meno risorse di sistema. YARV (Ruby 1.9) utilizza thread di sistema nativi.


3 per risposta № 3

Sono un utente regolare di JRuby e il più grandela differenza è che i thread JRuby sono realmente concomitanti. Sono in realtà thread a livello di sistema in modo che possano essere eseguiti simultaneamente su più core. Non conosco alcun posto dove il codice MRI Ruby 1.8 venga eseguito più lentamente su JRuby. Potresti considerare di dare un'occhiata a questa domanda Il rubino ha un vero multithreading?.