2010-02-10 11 views

Odpowiedz

1

W większości systemów Wątki lekkie to normalne wątki tworzone za pomocą biblioteki, takie jak p_threads w systemie Linux.

Podczas gdy waga ciężka, w niektórych systemach należy odnieść się do procesu systemowego, z własną pamięcią wirtualną i bardziej złożoną strukturą, np. Informacjami o wydajności/statystykach procesu.

Dalsze informacje:

http://www.computerworld.com/s/article/66405/Processes_and_Threads

http://msdn.microsoft.com/en-us/library/ms684841(VS.85).aspx

25

Jest to związane z ilością „kontekst” związane z gwintem, i w rezultacie ilość czasu potrzebnego do przeprowadzenia „przełączenie kontekstu ".

Wątki o dużej wadze (zazwyczaj wątki poziomu jądra/os) mają wiele kontekstów (rejestry sprzętowe, stosy kernela itp.). Przerzucanie wątków zajmuje dużo czasu. Wagi ciężkie mogą również podlegać takim ograniczeniom, na przykład w niektórych systemach nie można zignorować wątków jądra, co oznacza, że ​​nie można ich przymusowo wyłączyć, dopóki nie zrezygnują z kontroli.

Lekkie wątki z drugiej strony (zwykle wątki przestrzeni użytkownika) mają znacznie mniejszy kontekst. (Zasadniczo dzielą one ten sam kontekst sprzętowy), muszą jedynie przechowywać kontekst stosu użytkowników, dlatego czas potrzebny na przełączenie wątków lekkich jest znacznie krótszy.

W przypadku większości systemów wszystkie wątki utworzone jako programista w przestrzeni użytkownika będą lekkie w porównaniu z wątkami przestrzeni jądra. Nie ma formalnej definicji wagi ciężkiej i lekkiej, to po prostu więcej porównania wątków z większą ilością kontekstów i wątków z mniejszym kontekstem. Nie zapominaj, że każdy system operacyjny ma inną implementację wątków, a linie między ciężkimi i lekkimi wątkami niekoniecznie są jasno zdefiniowane. W niektórych językach programowania i frameworkach, kiedy tworzysz "Thread", możesz nawet nie otrzymać pełnego wątku, może po prostu otrzymujesz abstrakcję, która ukrywa pod spodem rzeczywistą liczbę wątków.

[Niektóre systemy operacyjne pozwalają wątki dzielić przestrzeń adresową, więc nici, które zwykle dość ciężkie, są nieco lżejsze]

4

Java standardowe gwinty są dość ciężkie w porównaniu do nici Erlang, które są bardzo lekkie procesy spawnable. Erlang demonstruje rozproszoną skończoną maszynę stanów. Jednak jako przykład, http://kilim.malhar.net/, biblioteka rozszerzeń Java oparta na modelu współbieżności, proponuje konstrukcję dla wątków o niskiej wadze w java. Zamiast wątku implementującego run() wątek Kilim implementuje się z biblioteki Kilim za pomocą metody execute(). Wygląda na to, że środowisko wykonawcze Javy przewyższa wydajność Erlanga (przynajmniej w lokalnym środowisku AFAIK). Java rzeczywiście miała takie rzeczy w oryginalnej specyfikacji językowej zwanej "zielonym wątkiem", ale kolejne wersje Java upuściły je na rzecz rodzimych wątków.

Powiązane problemy