Co sprawia, że kolejność wykonywania wątków jest nieprzewidywalna? Czy programista w pewnym momencie używa liczb losowych lub sprawdza zasoby systemowe lub widzi, który wątek czekał wystarczająco długo lub ...?Co sprawia, że kolejność wykonywania wątków jest nieprzewidywalna?
Odpowiedz
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ć.
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.
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.
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.
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.
- 1. Co sprawia, że członek związku jest aktywny?
- 2. Co sprawia, że Ometa jest wyjątkowa?
- 3. Co sprawia, że moduł jest modułem pragmatycznym?
- 4. Co sprawia, że jedno z tych zapytań jest szybsze?
- 5. Co sprawia, że pylin myśli, że moja klasa jest abstrakcyjna?
- 6. Co sprawia, że ten Android App debuggable
- 7. Co sprawia, że portlet JSR-286 jest zgodny?
- 8. Co sprawia, że projekt Visual Studio 2013 jest projektem katana?
- 9. Co sprawia, że projekt ASP.NET jest aplikacją a biblioteką?
- 10. co sprawia, że zmienna jest widoczna (intellij idea)
- 11. Co sprawia, że domena z domeną ajax jest niepewna?
- 12. Co zrobić, jeśli finalizator sprawia, że obiekt jest osiągalny?
- 13. Co sprawia, że liczba oczekujących oczekującej kolejki AMQ jest ujemna?
- 14. Sprawia, że element iframe jest niewidoczny.
- 15. kolejność wykonywania Haskell IO
- 16. Jaka jest kolejność wykonywania w NUnit?
- 17. Kolejność wykonywania filtra działania
- 18. UISearchController sprawia, że kontroler czarny
- 19. Linux: wykryj w czasie wykonywania, że proces ma wiele wątków.
- 20. kolejność wykonywania metody statycznej
- 21. kolejność wykonywania adnotacji java
- 22. Co sprawia, że PHP wolniej niż Java lub C#?
- 23. Co sprawia, że Julia nie nadaje się do programowania ogólnego?
- 24. co sprawia, że const na niższych poziomach maszyny?
- 25. Co sprawia, że duża różnica między odgałęzieniem a apostrofem?
- 26. Co sprawia, że ta karta zmienia wymiary? [Video & Code]
- 27. Projekcja sprawia, że zapytanie wolniejsze
- 28. JavaScript kolejność wykonywania z setTimeout()
- 29. Jaka jest kolejność wykonywania w MVC Razor view/układ
- 30. Kolejność wykonywania wielokrotnych autoloaderek kompozytora
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. –
@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