2009-07-29 11 views

Odpowiedz

4

Myślę, że wielką wygraną jest rozszerzenie oparte na C can release the GIL. Tak więc, na przykład, adapter MySQL może całkiem czyścić długo działające zapytania bazy danych bez blokowania wszystkich innych wątków Ruby.

7

Gwinty w wersji 1.9 są natywne, ale zostały "spowolnione", aby umożliwić uruchamianie tylko jednego wątku naraz. Jest tak, ponieważ mogłoby to wprowadzić w błąd istniejący kod, gdyby wątki rzeczywiście działały równolegle.

Plusy:

  • IO jest teraz asynchroniczny w wątkach. Jeśli wątek blokuje IO, kolejny wątek będzie kontynuowany aż do zakończenia operacji wejścia/wyjścia.
  • Rozszerzenia C mogą wykorzystywać prawdziwe wątki.

Wady:

  • Wszelkie rozszerzenia C, które nie są wątku bezpieczne mogą mieć problemy, które są trudne do znalezienia przy użyciu wątek. Nie ma możliwości oznaczenia rozszerzenia jako wątku niebezpiecznego, co uniemożliwi jego użycie w wątkach.
  • Nazwa klasy jest taka sama. Natywna klasa wątków powinna zostać nazwana czymś innym.
  • A co najgorsze, wątki działają inaczej na różnych platformach! Na przykład priority() różni się między Solaris, Windows i Linux. Rzeczy takie jak loop {} działają dobrze w Linuksie, inne wątki mają szansę uruchomić. Jednak w wątkach Solaris wątek przeszywa czas procesu i nigdy nie wyjdziesz!