/ / Aký praktický efekt budú mať rôzne modely závitovania Ruby (Ruby vs JRuby) na váš kód ako vývojár? - rubínový, viacvláknový, jruby

Aký praktický účinok budú mať rôzne modely Ruby Threading (Ruby vs JRuby) na váš kód ako vývojár? - rubínový, viacnásobný, jrubový

Snažím sa pochopiť praktický dopad rôznych modelov závitov medzi MRI Ruby 1.8 a JRuby.

Čo tento rozdiel pre mňa znamená ako vývojára?

Existujú aj praktické príklady kódu v MRI Ruby 1.8, ktoré budú mať z dôvodu rôznych modelov závitov horšie výkonové charakteristiky v JRuby?

odpovede:

11 pre odpoveď č. 1

stáť

  • Ruby 1.8 má zelené vlákna, ktoré sa dajú rýchlo vytvárať / mazať (ako objekty), ale v skutočnosti sa nevykonávajú paralelne a nie sú naplánované operačným systémom, ale virtuálnym strojom.
  • rubín 1.9 má skutočné vlákna, tieto sa pomaly vytvárajú / odstraňujú (ako objekty) z dôvodu volaní OS, ale kvôli GIL (globálny zámok tlmočníka), ktorý umožňuje naraz vykonávať iba jedno vlákno, ani tieto nie sú skutočne paralelné
  • JRuby má tiež skutočné vlákna naplánované OS a sú skutočne súbežné

záver

Vláknový program bežiaci na dvojjadrovom CPU bude bežať rýchlejšie na JRuby ako ostatné implementácie, pokiaľ ide o vláknové hľadisko.

Upozornenie!

Mnoho existujúcich rubínových knižníc nie je bezpečné pre vlákna, takže výhoda JRuby je v mnohých prípadoch zbytočná.
Tiež si všimnite, že ak sa má použiť vlákno, mnoho techník programovania rubín (napríklad trieda vars) bude vyžadovať ďalšie programovacie úsilie na zaistenie bezpečnosti vlákien (mutexové zámky, monitory atď.).


6 pre odpoveď č. 2

Vlákna JRuby sú natívne systémové vlákna, takžeposkytujú vám všetky výhody programovania pomocou vlákien (vrátane použitia viacerých jadier procesorov, ak sú použiteľné). Ruby má však globálny interpreterový zámok (GIL), ktorý zabraňuje simultánnemu chodu viacerých vlákien. Jediným skutočným rozdielom vo výkone je skutočnosť, že vaše aplikácie MRI / YARV Ruby nebudú schopné využívať všetky vaše procesorové jadrá, ale vaše aplikácie JRuby to s radosťou urobia.

Ak to však nie je problém, vlákna MRI sú (teoreticky to netestovali) trochu rýchlejšie, pretože sú zelené vlákna, ktoré používajú menej systémových prostriedkov. YARV (Ruby 1.9) používa natívne systémové vlákna.


3 pre odpoveď № 3

Som pravidelný užívateľ JRuby a najväčšíRozdiel je v tom, že vlákna JRuby sú skutočne súbežné. V skutočnosti sú to vlákna na systémovej úrovni, takže ich možno vykonávať súbežne na viacerých jadrách. Neviem o žiadnom mieste, kde kód MRI Ruby 1.8 beží na JRuby pomalšie. Túto otázku môžete zvážiť Má Ruby skutočný multithreading?.