2010-10-01 12 views

Odpowiedz

2

Najprawdopodobniej powodem jest to, że ruby ​​nie mają nici "prawdziwych". Ma to, co nazywane jest zielonymi nitkami. Interpreter ruby ​​zajmuje się planowaniem wątków wykonywania bez użycia żadnych bazowych wątków systemu operacyjnego. To skutecznie sprawia, że ​​Ruby jest pojedynczym wątkiem.

+2

Mimo że YARV (ruby 1.9) używa tylko jednego procesora na raz, nie sądzę, że używa on zielonych wątków. –

+3

Zielone wątki nie sprawiają, że pule wątków są bezużyteczne. Jeden wątek może czekać na coś zewnętrznego do programu, podczas którego można zaplanować kolejny wątek. Używanie zielonych wątków jest często (zwykle?) Bardziej wydajne niż przetwarzanie sekwencyjne. – Kelvin

20

prawdopodobnie dlatego, że łatwo jest przetasować własne przy użyciu standardowej biblioteki "Kolejka".

q = Queue.new 
3.times { Thread.new { while something = q.pop(true) rescue nil; ... } 

Jest to jednak dobre pytanie - mogę zaproponować, aby porozmawiać z Ruby Core.

+0

Czy otrzymałeś jakąś odpowiedź? –

+2

Nie mogę sobie nawet przypomnieć, czy teraz zapytałem ... – rogerdpack

3

Podejrzewam, że to dlatego, że ThreadPool nie byłby przydatny w implementacjach Rubiego opartych na języku C. Możesz użyć tylko jednego procesora naraz za pomocą Ruby Intepreter Matza lub Yet Another Ruby VM.

Jeśli chcesz, aby wiele wątków było uruchamianych na wielu procesorach, musisz zamiast tego użyć JRuby.

+0

Dokładnie. Puli wątku, zielone nici, bezcelowe. – Joshua

+14

Na pewno nie ma sensu, jeśli masz blokujące IO? –

+0

@Andy dobry punkt. –