SORU
11 EYLÜL 2008, PERŞEMBE


Ruby gerçek çoklu var mı?

"Ruby iş parçacığı green threads kullanarak. "kooperatif biliyorum Nasıl gerçek oluşturabilirim "OS düzey işlem için birden fazla cpu çekirdeği kullanmak için" benim uygulama iş parçacıkları?

CEVAP
11 EYLÜL 2008, PERŞEMBE


Jörg ile güncellenen bu Eylül 2011 yorum

İki kafa karıştırıcı gibi görünüyorçokfarklı şeyler burada: Ruby Programlama Dili belirli bir iş parçacığı modeli Ruby Programlama Dili belirli bir uygulama. Orada şu anda Yakut 11 farklı uygulamaları etrafında Programlama Dili ileçokfarklı ve benzersiz bir iş parçacığı modelleri.

(Ne yazık ki, bu 11 uygulamaları sadece gerçek gibi üretim kullanımı için hazır, ama yıl sonuna kadar bu sayının muhtemelen dört ya da beş gidecek.) (Güncellemeşimdi 5 : MR, JRuby, YARV (Ruby 1.9 için tercüman),) Rubinius ve IronRuby.

  1. İlk uygulama aslında bir adı yok bu oldukça tuhaf bir durum başvurmak için yapar ve çok can sıkıcı bir durum kafa karıştırıcı. En sık olarak adlandırılır "Yakut", çünkü isim olması daha can sıkıcı, kafa karıştırıcı, Yakut özellikleri arasında sonsuz karışıklığa yol açar Programlama Dili ve özellikle Ruby bir Uygulama.

    Ayrıca bazen denir "MR" "Ruby Matz ( ") Uygulaması, CRuby veya MatzRuby.

    MRI implements Ruby Threads as Green Threads within its interpreter. Ne yazık ki, bu iş parçacığı izin vermez buna paralel olarak planlanmış olması, yalnızca bir iş parçacığının bir koşabilirler zaman.

    Ancak, C iş Parçacığı (POSIX evreleri vb.) herhangi bir sayı çalıştırabilirsiniz Yakut İplik paralel olarak, dış C Kütüphaneleri, ya da MRI Kendi iş parçacığı oluşturma C Uzantıları hala çalıştırabilirsiniz paralel.

  2. İkinci uygulama YARV (kısaca "Henüz "Başka bir Ruby VM. 5* *ancak, Küresel bir Tercüman kullanır Sadece bir Yakut İplik sağlamak için kilit (GİL) aslında olabilir herhangi bir zamanda planlanmış.

    MRI gibi, C Konularıolabiliraslında paralel Ruby Konuları çalıştırın.

    Gelecekte, GİL mümkündürolabilirkırılacak ince taneli daha kilitler, böylece izin içine daha aşağı ve daha fazla kod aslında paralel olarak çalıştırmak için, ama orası çok uzakta, bile değilplanlanmışhenüz.

  3. JRuby implements Ruby Threads as Native Threads, "JVM durumunda belli ki" JVM "anlamına gelir Yerel Konuları ". Yazışmalar JRuby onlara ek bir kilitleme uygular. Yani ipler aslında paralel çalıştırabilirsiniz o şeye bağlıdır JVM: bazı Jvm'ler işletim sistemi iş Parçacığı ve bazı JVM Konuları uygulamak Yeşil Parçacıkları olarak. (Ana Sun/Oracle ile İLGİLENİYORUZ 1.3 beri sadece işletim sistemi iş parçacığı kullanın) Jvm'ler

  4. XRuby implements Ruby Threads as JVM Threads da.Güncelleme: XRuby öldü.

  5. 10* implements Ruby Threads as Native Threads*, "CLR durumunda besbelli" Yerel Konuları "CLR iş Parçacığı". Ironruby onlara ek bir kilitleme uygular, yani, buna paralel olarak, CLR desteklediği sürece idare etmek zorundadır bu.

  6. Ruby.NET 13**.Güncelleme:Ruby.NET öldü.

  7. Rubinius implements Ruby Threads as Green Threads within its Virtual Machine. Daha doğrusu: Rubinius VM ihracat çok hafif, çok esnek eşzamanlılık/paralellik yerel olmayan akış denetimi yap diye "Task", ve tüm diğer eşzamanlılık yapıları (iş Parçacığı bir tartışma, aynı zamanda,* Continuations *18 ve bu diğer şeyler) saf Ruby, Görevleri kullanarak uyguladı.

    Rubinius (şu anda) paralel iş Parçacıkları, zamanlama, olamaz ancak, bu çok fazla bir sorun değil ekleme: Rubinius olabilir zaten run several VM instances in several POSIX Threads in parallel, Rubinius bir süreç içinde. İş Parçacığı olduğundan aslında Ruby uygulanan, başka bir Yakut gibi olabilir nesne seri hale getirilmek ve bir farklı farklı bir VM gönderildi POSIX Thread. (Aynı model Erlang VM IŞINI. SMU eşzamanlılık için kullanır. Zaten*.* 21)

    GüncellemeBu cevap Rubinius hakkında bilgi artık yok olan av Tüfeği VM. "Yeni" C VM kullanmaz yeşil ipler zamanlanmış üzerinde birden çok sanal makine (Yani eğer x/KİRİŞ tarzı), bunu kullanan bir daha geleneksel tek VM ile birden fazla yerli işletim sistemi iş parçacığı modeli, tıpkı bir istihdam demek, CLR, Mono, ve hemen hemen her JVM.

  8. MacRuby üstüne YARV bir liman olarak başladı Objective-C çalışma Zamanı ve CoreFoundation ve Kakao Çerçeveler. Bu şimdi YARV dan önemli ölçüde gelişti, ancak şu anda bunun AFAIK hala shares the same Threading Model with YARV. Güncelleme:MacRuby itiraz ettiği Film, MacRuby sonraki sürümlerinde kaldırılacak olan çöp toplayıcı undead elma bağlıdır.

  9. Cardinal Parrot Virtual Machine Ruby için bir uygulamasıdır. Konuları henüz, ancak uygulamak değil mi bu olduğunda, büyük ihtimalle Parrot Threads bunları uygulamaya koyacak.Güncelleme: Kardinal ölü/. çok pasif görünüyor

  10. MagLev GemStone/S Smalltalk VM Ruby için bir uygulamasıdır. İş parçacığı modeli ne bilgim yok /S kullanan taş, ne MagLev kullanır ya da bile bir iş parçacığı modeli konuları bile henüz (muhtemelen değil) uygulanır.

  11. HotRubydeğilonun tam bir Ruby Uygulaması kendi. YARV bir Java VM uygulamasıdır JavaScript. HotRuby konuları (henüz?) desteklemiyor ve o zaman JavaScript çünkü paralel olarak çalıştırmak mümkün olmayacak mı gerçek paralellik desteği bulunmuyor. Bir ActionScript var ancak, HotRuby ve önceki sürümlerine olabilir sürüm aslında paralellik destek.Güncelleme: HotRuby öldü.

Ne yazık ki, bu 11 Ruby Uygulamaları sadece iki, aslında üretime hazır: MR ve JRuby.

Eğer istiyorsanız yani, şu anda senin JRuby paralel iş parçacığı, gerçek bu kötü oldu bu sadece bir seçim değil: JRuby aslında daha hızlıdır daha MR ve muhtemelen daha istikrarlı.

Aksi takdirde, "" Ruby çözüm süreçlerini kullanmaktır klasik yerine paralellik için iş parçacığı. Ruby Ana Kütüphane bu işin daha kolay bir Yakut çatal için yapar Process.fork method ile Process module içerir süreç. Ayrıca, Ruby Standart Kütüphane içerir Distributed Ruby (dRuby / dRb) Ruby sağlayan kütüphane, basit olması için kod birden çok işlem arasında, dağıtılan ağ üzerinden aynı makinede aynı zamanda sadece.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AlaskanGrizzly

    AlaskanGrizz

    30 EKİM 2009
  • guau . .

    guau . .

    25 Ocak 2008
  • Matthew Smith

    Matthew Smit

    24 Mayıs 2010