Liczbę procesów dostępnych dla wirtualnej maszyny języka Java można określić za pomocą statycznej metody Runtime, availableProcessors . Po określeniu liczby dostępnych procesorów utwórz odpowiednią liczbę wątków i odpowiednio podziel pracę.
Aktualizacja : Aby jeszcze bardziej wyjaśnić, wątek jest po prostu obiektem w Javie, więc możesz go utworzyć tak, jak każdy inny obiekt. Powiedzmy więc, że wywołujesz powyższą metodę i stwierdzasz, że zwraca ona 2 procesory. Niesamowite. Teraz możesz utworzyć pętlę, która generuje nowy wątek, oddziela pracę dla tego wątku i odpala z wątku. Oto kilka psuedokodów, aby pokazać, o co mi chodzi:
int processors = Runtime.getRuntime().availableProcessors();
for(int i=0; i < processors; i++) {
Thread yourThread = new AThreadYouCreated();
// You may need to pass in parameters depending on what work you are doing and how you setup your thread.
yourThread.start();
}
Aby uzyskać więcej informacji na temat tworzenia własnego wątku, przejdź do tego samouczka . Możesz również zajrzeć do Puli wątków w celu utworzenia wątków.
Prawdopodobnie zechcesz również przyjrzeć się platformie java.util.concurrent, aby uzyskać takie informacje. Coś jak:
lub
Jest to o wiele przyjemniejsze niż radzenie sobie z własnymi pulami wątków itp.
źródło
Opcja 1:
newWorkStealingPool z
Executors
Dzięki temu interfejsowi API nie musisz przekazywać liczby rdzeni do
ExecutorService
.Implementacja tego API z grepcode
Opcja 2:
newFixedThreadPool API z
Executors
lubother newXXX constructors
, który zwracaExecutorService
zamień nThreads na
Runtime.getRuntime().availableProcessors()
Opcja 3:
ThreadPoolExecutor
przekazać
Runtime.getRuntime().availableProcessors()
jako parametr domaximumPoolSize
.źródło
Doug Lea (autor równoległego pakietu) ma ten artykuł, który może mieć znaczenie: http://gee.cs.oswego.edu/dl/papers/fj.pdf
Środowisko Fork Join zostało dodane do Java SE 7. Poniżej znajduje się kilka innych odniesień:
http://www.ibm.com/developerworks/java/library/j-jtp11137/index.html Artykuł autorstwa Briana Goetza
http://www.oracle.com/technetwork/articles/java/fork-join-422606.html
źródło
Standardowym sposobem jest metoda Runtime.getRuntime (). AvailableProcessors (). W przypadku większości standardowych procesorów zwróci się tutaj optymalną liczbę wątków (która nie jest rzeczywistą liczbą rdzeni procesora). Dlatego właśnie tego szukasz.
Przykład:
NIE zapomnij zamknąć usługi executora w ten sposób (inaczej twój program się nie zakończy):
Oto krótki opis, jak skonfigurować przyszły kod MT (offtopic, dla ilustracji):
Następnie musisz śledzić liczbę spodziewanych wyników i pobierać je w następujący sposób:
źródło
W klasie Runtime istnieje metoda o nazwie availableProcessors (). Możesz użyć tego, aby dowiedzieć się, ile masz procesorów. Ponieważ twój program jest związany z procesorem, prawdopodobnie chciałbyś mieć (co najwyżej) jeden wątek na dostępny procesor.
źródło