Потоки в Java ПРОТИВ потоков на сервере приложений/Tomcat

#java #multithreading #tomcat #application-server

Вопрос:

Из первой книги по Java я знаю, что потоки в java не работают параллельно, но JVM просто переключается между потоками, которые нам кажутся параллельными. И эти потоки выполняются в одной JVM, которая сама по себе является процессом, работающим в одном ядре компьютера.

Вот содержание из книги…» При наличии более чем одного стека вызовов создается впечатление, что одновременно происходит несколько событий. На самом деле, только настоящая многопроцессорная система может выполнять более одной задачи одновременно, но с потоками Java может показаться, что вы выполняете несколько задач одновременно. Другими словами, выполнение может перемещаться между стеками вперед и назад так быстро, что вам кажется, что все стеки выполняются одновременно. Помните, что Java-это всего лишь процесс, запущенный в вашей базовой операционной системе. Итак, во-первых, Javaсам по себе должен быть «текущим процессом выполнения » в операционной системе».

Я сомневаюсь, что потоки tomcat и потоки сервера приложений, которые создаются по запросу пользователя, также не выполняются параллельно, а JVM, работающая на одном ядре (на котором работает сервер приложений), просто переключается между потоками? ИЛИ потоки действительно работают параллельно на разных ядрах?

Я борюсь с этим вопросом уже много дней. Я много гуглил по этому поводу, но не смог найти ответа. Поэтому размещаю это здесь, надеясь, что кто-нибудь сможет мне помочь.

Спасибо.

Комментарии:

1. Я думаю, что вы ошибаетесь в том, что потоки не работают параллельно. Хотя, возможно, это было верно для некоторых очень старых JVM.

2. Много лет назад процессоры (на домашних компьютерах) имели один аппаратный поток.

3. Если ваше оборудование имеет более одного ядра, то потоки Java будут использовать их. Рабочие потоки Tomcat-это потоки Java. Ваша настоящая проблема в том, что вы неправильно прочитали или неправильно поняли то, что говорится в первой книге Java. (Я не могу поверить, что это говорит о том, что потоки не выполняются параллельно. Но вполне вероятно, что в нем говорится, что потоки не обязательно выполняются параллельно … или что-то в этом роде.)

4. Для справки, Java поддерживает потоки, работающие на нескольких ядрах, начиная с Java 1.2 … и ранее для некоторых платформ. Java 1.2 была выпущена в 1998 году, за 5 лет до того, как была впервые опубликована первая Java .

5. Это НЕ говорит и не подразумевает, что два или более потоков не могут выполняться параллельно на разных ядрах. На самом деле, если два или более потоков могут быть запущены и доступны ядра, то именно это и произойдет. Как я уже сказал, вы неправильно прочитали / неправильно поняли книгу. Или… если вы настаиваете на том, что не поняли неправильно, о чем в ней говорится, то книга просто ошибочна, и вам следует выбросить ее в мусорное ведро и пойти купить новый / лучший учебник. Выбор за вами 🙂