Jakie są wątki lekkie i ciężkie pod względem Javy?Wątek o dużej wadze i małej wadze
Odpowiedz
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
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]
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.
- 1. Tworzenie podmenu JPopupMenu o wadze ciężkiej
- 2. Android ImageView o wadze nie centrującej w rodzicu LinearLayout
- 3. Czy mysql może obsługiwać zestaw danych o wadze 50 gb?
- 4. Jaki jest najszybszy algorytm komputerowy dla wszystkich permutacji liczby binarnej o tej samej wadze hammingowej?
- 5. Zmiany w wadze marki Bootstrap w oparciu o menu w przeglądarce Safari
- 6. Eclipse używa zbyt dużej ilości pamięci i jaka jest najlepsza konfiguracja?
- 7. Mnożenie małej macierzy rzadkiej
- 8. Dystrybucja małej aplikacji PHP
- 9. jak zatrzymać kwerendę o dużej kwerendie
- 10. Obraz systemu VMWare Linux o małej powierzchni roboczej
- 11. Jak obliczyć sekwencje de Bruijna dla alfabetów o małej mocy?
- 12. Wymuszenie stopki u dołu strony o małej zawartości
- 13. Python wątek i wydajność?
- 14. Jak uniknąć zapisywania zbyt dużej ilości danych na wyjściu i który blokuje wątek?
- 15. AudioServicesPlaySystemSound i główny wątek
- 16. Wątek i kolejka
- 17. wyświetlania AM i PM w małej litery po formatowaniu dat
- 18. iOS7 ostatniej komórki UITableView sił przekrojowych separator o dużej
- 19. Wątek-lokalny magazyn i iOS
- 20. jak pisać i wykonywać wątek
- 21. Context.Response.End() i wątek został przerwany
- 22. HTML5: uzyskiwanie dostępu do danych lokalnych o dużej strukturze
- 23. Raporty o zbyt dużej liczbie odwiedzin w równoległej kompilacji Gradle
- 24. Kompresja liczbę duże (lub ciąg) do małej wartości
- 25. UIActionSheet na iPadzie ramie zbyt małej
- 26. Recycler Wyświetl elementy o dużej pustej przestrzeni po 23.2.0
- 27. Inicjowanie dużej, stałej wielkości tablicy o typach innych niż Copy
- 28. Etykiety o dość dużej osi do skali logarytmicznej w ggplot
- 29. Język małej kołdry Ravi Sethiego w Haskell
- 30. Używanie dużej TObjectList i zwalnianie nieużywanej części
@TFD - OP zadał tylko 4 pytania, jest dużo czasu na zaakceptowanie odpowiedzi. – ChrisF