liczba watkow a priorytety

0

hej,
mam takie troche teoretyczne pytanie. czy jest jakas dopuszczalna-bezpieczna liczba watkow dla aplikacji? z tego co patrze na necie, to widze ze to zalezy i od JVM i od systemu operacyjnego. ktos tam napisal ze udalo mu sie ich stworzyc 7000 nim dostal StackOverflow. ale czy jest jakas konwencja ktora mowi cos w stylu (na przyklad): "lepiej nie przekraczac 20 watkow dla danej aplikacji"?

teraz drugie pytanie-jak to sie ma do priorytetow? no bo ogolnie nowy watek (jesli nie ustawimy) dostanie priorytet watku w ktorym zostal utworzony. ale przykladowo-ja mam 20 watkow i kazdemu chce nadac priorytet. tylko ze priorytety sa wartosci od 1 do 10 wlacznie. jak mam nadac priorytet 11 watkowi? czy musze znow wybrac z zakresu 1-10?

pzdr,
misty

0

Najlepszą przepływność uzyskujesz jeżeli masz N albo N+1 wątków, gdzie N to liczba rdzeni przydzielonych JVM. Więcej wątków zaczyna nawzajem się blokować, a i częściej kontekst jest przełączany.

0

liczba rdzeni (rozumiem procesora)? moglbys to rozwinac? czy moge to kontrolowac/sprawdzic programistycznie?

pzdr,
misty

0

Tak chodzi o liczbę przydzielonych procesorów (dziś procesory są wielordzeniowe i można czasami zarządzać przydziałem rdzeni, a nie całych procków). Liczba dostępnych procesorów w systemie:

Runtime.getRuntime().availableProcessors();
0

W kwestii tego, co napisal Koziołek o wzajemnym blokowaniu wątków dodam, że w takim przypadku problemy może stwarzać przydzielanie różnych priorytetów. Jeśli jakiś wątek ma niski priorytet, może nigdy nie dojść do głosu, jeśli za każdym razem do zwalnianych zasobów będzie trafiał się inny wątek oczekujący o wyższym priorytecie.
Co prawda na razie to jest wiedza książkowa (jeszcze tego nie testowałem), ale brzmi sensownie. W książce zostało zaznaczone, że powinno się unikać sytuacji, gdy prawidłowe działanie aplikacji jest uzależnione od przedzielania wątkom różnych priorytetów.

0

@VGT, "Współbieżność dla praktyków" jak sądzę? Przetestowałem jakieś 80% tej książki i naprawdę się sprawdza.

@misty, co dokładnie chcesz osiągnąć.

0

@Koziołek
Java. Podstawy Horstmann'a (końcówka pierwszej części - jestem właśnie na świeżo po całym dziale o wielowątkowości ;) )

0

Ale zdaje sie, ze opisana wyzej sytuacja to zwykle zaglodzenie a dobre szeregowanie wykonania watkow powinno zapobiegac tego typu sytuacjom.

0

@[losowa nazwa], tak, tyle tylko, że wiele osób próbuje ręcznie szeregować wątki. Gdybym ci ja miał czas to by mozna było ladnie opisać ThreadPoolExecutor i odsyłać z forum do tego.

0

@koziolek,
nic konkretnego nie chce osiagnac. przygotowuje sie do SCJP i czytajac ksiazke/rozwiazujac w niej testy nasuwaja mi sie jakies rozne pytanie. stad ten moj post.

no dobra, ale nikt z Was nie odpowiedzial co z tymi priorytetami? skoro sa od 1-10, a ja przykladowo mam kilkanascie i chce ustawic kazdemu, to co powinnam ustawic watkowi 11? czy musze znow przydzielic wartosc od 1 do 10 i wtedy bedzie kilka watkow o tym samym priorytecie?

0

Nie dotykaj priorytetów. Nigdy, przenigdy, nie zmieniaj priorytetu. Jest to pozostałość po pierwszej wersji Javy i wtedejszych pomysłach na zarządzanie wątkami. Bardzo łatwo zrobić sobie tym krzywdę poprzez zagłodzenie wątków.

0

nie, nie mam zamiaru. to byly pytania czysto teoretyczne.

0

Powyższa rada Koziołka zalecana, ale jeśli ciekawy wiedzy, to ja na świeżo nauczyłem się o priorytetach tyle:
Zakres 1-10 nie oznacza, ze masz tylko 10 priorytetów do rozdania. Masz do rozdania 10 typów priorytetów. W końcu jeśli się tym nie zajmujesz, wszystkie tworzone wątki maja priorytet normal (czyli 5). Po prostu jesli jakiejś grupie zaczniesz przydzielać np 10, to staną się ważniejsze, niż te z piątką.
Dalsze mieszanie, to np informacja, że te priorytety są konwertowane na priorytety danego systemu, a np windows ma 7 różnych priorytetów, wiec te 10 javowych trzeba jakoś dopasować do 7 windowsowych, co w rezultacie dwa rozne javowe (niektóre) zmieni na jeden windowsowy (to ponownie wiedza książkowa ;) ).

0

Czysto teoretycznie priorytety miały takie samo zadanie jak nice i renice z systemów unixowych. Jednakże pierwsze wersje JVM używały bardzo prostego mechanizmu kolejkowania wątków co powodowało, że ręczna zmiana priorytetu prowadziła do zagłodzenia innych wątków. Obecnie język udostępnia znacznie bardziej eleganckie, wysokopoziomowe rozwiązanie do zarządzania wątkami. Priorytety pozostały by zachować zgodność wstecz.

0

A zmiana priorytetow watkow to nie jest przypadkiem tylko 'sugestia' dla maszyny wirtualnej, ktora i tak zrobi po swojemu ?

0

@lobo1111, taka sugestia a la "złota polska młodzież" - komórka albo wpier#$%$%#. Sugerujemy to pierwsze.

0

Jeśli chodzi o te całe sugestie, o których zawsze tak w tutorialach/książkach/kursach piszą, to zwyczajnie odpalona jvm (jako aplikacja) na winshicie/linuchu/macu traktuje to właśnie tak jak napisał Koziołek.

1 użytkowników online, w tym zalogowanych: 0, gości: 1