2011-10-27 9 views

Odpowiedz

10

Program planujący jest zazwyczaj programem planującym systemu operacyjnego. Wpływ na to ma wiele czynników, w tym to, co robią inne procesy na komputerze, co robi sprzęt (przerywa) itp. W zależności od systemu operacyjnego, czasami mogą występować losowe liczby, ale podejrzewam, że nie. Jest to bardziej nieprzewidywalny sposób, w jaki wiele zmiennych przedziałów czasowych może się nakładać.

0

W zależności od JVM, JVM może przenieść wątek, tak jak to jest do OS, a program planujący OS zaplanuje wątek, lub JVM może zadecydować o zaplanowaniu samego wątku, więc pierwsza różnica (nieprzewidywalne zachowanie na 2 różnych maszynach dla ta sama sytuacja) tutaj, czy wątek jest planowany przez JVM, czy OS, nie może być naprawdę pewny ..... Ponadto istnieje wiele czynników, priorytet wątku jest jednym czynnikiem (możemy ustawić priorytet), zasób jest inny czynnik .... Jest mniej prawdopodobne, że w grę wchodzą liczby losowe.

+0

Wszystkie obecnie używane maszyny JVM pozostawiają planowanie wyłącznie dla systemu operacyjnego. Niektóre starsze maszyny JVM używały zielonych wątków, ale w tym przypadku * wszystkie * wątki były zarządzane przez maszynę JVM. –

+0

@MichaelBorgwardt Przypuszczam, że książka SCJP dla języka Java 6 musi zawierać to wyjaśnienie, nie wspominają o różnicach między starymi i nowymi JVM w książce! w każdym razie dzięki za aktualizację – Zohaib

4

Użycie liczb losowych w programie planującym wprowadziłoby niepotrzebne obciążenie do krytycznej sekcji systemu operacyjnego, więc jest bardzo mało prawdopodobne, że jest to przyczyną, przynajmniej w każdym głównym systemie operacyjnym.

Wątek zwykle działa, dopóki nie wywoła OS, który blokowałby lub do momentu wystąpienia przerwania lub do momentu wygaśnięcia jego fragmentu czasowego (co ostatecznie jest tylko przerwaniem zegara). Nawet jeśli potrafisz ostrożnie konstruować rzeczy tak, aby dwa wątki zawsze blokowały w deterministycznej kolejności, nie masz żadnej kontroli nad dokładnym momentem wystąpienia dwóch ostatnich efektów. Kolejność, w jakiej wątki w twojej aplikacji są wykonywane, będzie ostatecznie zależała od zdarzeń spoza twojej aplikacji.

0

Nowoczesne systemy operacyjne używają tak zwanych Preemtive multitasking. Gwarantuje to każdemu procesowi w systemie kawałek czasu procesora, z różnymi regułami, kiedy przerwać każdy i pozwolić następnym skręcić. Właśnie dlatego nie potrzebujesz jednego procesora na proces na twoim komputerze :)

Nie jest przypadkowa, ale generalnie nieprzewidywalna.

1

Inne pytania zrobić dobre strony ze szczegółami technicznymi, ale:

Aby być precyzyjnym, planowanie wątek w Javie jest dość skutecznie kontrolowany przez zamków, oczekiwania/powiadomić/notifyAll, snu metod i inne kontrola współbieżności. Tylko w tym czasie podczas wykonywania aplikacji, , gdy nie są one obecne, kolejność wykonywania różnych wątków jest niezdefiniowana.

Głównym powodem jest prawdopodobnie ze względu na łatwość przenoszenia Java w różnych systemach sprzętowych/OS. Logiczne jest również to, że jeśli jako programista nie definiujesz kolejności, w której różne wątki w aplikacji powinny być wykonywane przy użyciu wyżej wymienionych kontrolek współbieżności, nie przejmujesz się tym i to po prostu nie ma znaczenia wtedy i arbitralnie może być wybrane przez JVM.

Powiązane problemy