Может ли кто-нибудь объяснить, как многопоточная программа Java (например, контейнер сервлетов Tomcat) может использовать все ядра процессора, когда JVM является единственным процессом в Linux? Есть ли хорошая подробная статья, в которой подробно описывается предмет?
РЕДАКТИРОВАТЬ № 1. Я не ищу совета по реализации многопоточной программы на Java. Я ищу объяснение того, как JVM внутренне управляет использованием нескольких ядер на linux/windows, будучи все еще единым процессом в ОС.
EDIT # 2. Лучшим объяснением, которое мне удалось найти, является то, что Hotspot (Sun/Oracle JVM) реализует потоки как собственные потоки в Linux с использованием NPTL. Таким образом, чем меньше каждый поток в Java - это легкий процесс (собственный поток) для Linux. Это ясно видно с помощью команды ps -eLf
, которая выводит не только идентификатор процесса (PPID
), но также собственный идентификатор потока (LWP
).
Более подробную информацию можно найти здесь:
- http://www.velocityreviews.com/forums/t499841-java-5-threads-in-linux.html
- Отличие между потоками Java и потоками ОС?
РЕДАКТИРОВАТЬ № 3. У Википедии есть короткая, но приятная запись на NPTL с некоторыми дополнительными ссылками http://en.wikipedia.org/wiki/Native_POSIX_Thread_Library