Powiel możliwe:
Would a multithreaded Java application exploit a multi-core machine very well?Dwurdzeniowy wykorzystanie procesora w/pojedynczego wątku Java z systemem
mam zwykły i prosty gwint Java jak to działa na moim dwurdzeniowego maszyny (Windows XP środowisko 32-bitowe)
public static void main(String[] strs) {
long j = 0;
for(long i = 0; i<Long.MAX_VALUE; i++)
j++;
System.out.println(j);
}
Spodziewałem się, że przylgnie do jednego CP U, aby w pełni wykorzystać szybką pamięć podręczną (ponieważ w pętli nadal pracujemy z lokalną zmienną j, dlatego jedno użycie procesora byłoby 100%, a drugie byłoby prawie bezczynne. Do mojego zdziwienia, oba procesory są wykorzystywane w około 40% ~ 60% po rozpoczęciu wątku, a wykorzystanie jednego procesora jest nieco wyższe od drugiego.
Moje pytanie brzmi: czy istnieje mechanizm równoważenia obciążenia OS, który uruchamia się po wykryciu niewyrównoważenia? W moim przypadku jest to możliwe, że system operacyjny Windows wykrył, że jeden procesor uderza prawie w 100%, a drugi jest niemal bezczynny, więc okresowo zmienia kolejność wątków na inny procesor?
# Edit1 Znalazłem możliwe wyjaśnienie: http://siber.cankaya.edu.tr/ozdogan/OperatingSystems/ceng328/node130.html
Tak, system operacyjny odrzuci wątki. – Mysticial
Myślę, że to pytanie zostało już odebrane. http://stackoverflow.com/questions/1649402/would-a-multithreaded-java-application-exploit-a-multi-core-machine-very-well – parion
Pamiętaj, że większość programów Java spróbuje użyć jednego rdzenia i pozostanie z jednym rdzeniem, jak dowiedziałem się z Minecraft. Oto historia faceta, który to odkrył ze swoim nowym komputerem http://mlee888.wordpress.com/2006/03/31/java-performance-in-drok-coremultiprocessor-environment/ – parion