Многопоточное программирование в Java

Многопоточное программирование в Java

Тимур Сергеевич Машнин

Описание

Многопоточное программирование в Java – ключевой аспект разработки современных приложений, особенно в многопроцессорных системах. Эта книга детально рассматривает концепции процессов и потоков, управление и синхронизацию потоков, включая работу с пулом потоков, потокобезопасными коллекциями, синхронизаторами и параллельными потоками Stream. Вы научитесь создавать эффективные и масштабируемые приложения, используя все возможности Java для параллельного выполнения задач. Изучите принципы параллельного программирования, оптимизацию кода для многоядерных процессоров и познакомитесь с законом Амдала. Книга предназначена для разработчиков Java, желающих расширить свои знания и навыки в области многопоточного программирования.

<p>Многопоточное программирование в Java</p><empty-line></empty-line><p>Тимур Машнин</p>

© Тимур Машнин, 2021

ISBN 978-5-0053-1464-2

Создано в интеллектуальной издательской системе Ridero

<p>Процессы и потоки</p>

Чтобы начать работу с основами многопоточного программирования, давайте начнем с изучения потоков.

Каждая операционная система поддерживает потоки в той или иной форме.

Вначале, все усилия по повышению производительности процессоров были направлены на наращивание тактовой частоты, но со все большим увеличением частоты, наращивать её стало тяжелее, так как это требовало увеличения охлаждения процессоров.

Поэтому инженеры стали добавлять ядра в процессор, так и возникли многоядерные процессоры.

Принцип увеличения производительности процессора за счёт нескольких ядер, заключается в разделении выполнения потоков или различных задач на несколько ядер.

На самом деле, можно сказать, что практически каждый процесс, запущенный у вас в системе, имеет несколько потоков.

Операционная система может виртуально создать для себя множество потоков и выполнять их все как бы одновременно, даже если физически процессор и одноядерный.

Например, Windows — это многозадачная операционная система, то есть она может одновременно выполнять две и более программ или процессов.

И Windows — это также и многопоточная операционная система.

Это означает, что в действительности программы состоят из ряда более простых потоков выполнения.

Выполнение этих потоков планируется так же, как и выполнение процессов.

Если процессор одноядерный, и так как несколько потока выполняются у нас одновременно, то нужно создать для пользователя, эту самую одновременность выполнения.

Операционная система, делает это хитро, за счет переключения между выполнением этих потоков (эти переключения мгновенны и время идет в миллисекундах).

То есть, система некоторое время выполняет один поток, затем резко переключается на выполнение другого потока, и так далее по кругу.

Таким образом, создается впечатление одновременного выполнения нескольких задач.

Но при этом теряется производительность.

Если процессор многоядерный, тогда переключения может не потребоваться.

Система будет посылать каждый поток на отдельное ядро.

Несколько потоков могут выполняться одновременно, каждый на своем ядре.

Но тут есть проблема.

Для использования преимуществ многоядерности, код программы должен быть оптимизирован для выполнения на многоядерных процессорах.

Это означает, что программа, или процесс, должна быть максимально распараллелена в коде по отдельным задачам.

Если у вас есть многоядерный процессор, и у нас есть два ядра или два процессора P0 и P1, у вас будет возможность создать единицы выполнения, называемые потоками, T1, T2, T3.

И операционная система сама позаботится о планировании этих потоков на процессорах по мере их доступности.

Таким образом вы получаете многопоточное выполнение.

Платформа Java обеспечивает поддержку многопоточности с помощью пакета java.util.concurrent.

В многопоточном программировании существуют две основные единицы исполнения — это процессы и потоки.

И многопоточное программирование на Java в основном касается потоков.

Чем отличается поток от процесса?

Процесс имеет автономную среду исполнения.

Обычно процесс имеет полный, приватный набор базовых ресурсов среды выполнения, например, каждый процесс имеет собственное выделенное пространство памяти.

Процессы часто ассоциируются с приложением.

Однако то, что пользователь видит, как одно приложение, может быть на самом деле набором взаимодействующих процессов.

Для облегчения взаимодействия между процессами большинство операционных систем поддерживают Inter Process Communication (IPC).

IPC используется не только для связи между процессами в одной и той же системе, но и процессов в разных системах.

Java поддерживает IPC с помощью сокетов, библиотек RMI и CORBA.

Каждый экземпляр работающей виртуальной машины Java представляет собой один процесс.

Приложение Java может создавать дополнительные процессы с помощью объекта ProcessBuilder.

Потоки существуют в процессе — каждый процесс имеет хотя бы один поток.

Потоки используют общие ресурсы процесса, включая память и открытые файлы.

Это обеспечивает эффективное, но потенциально проблематичное взаимодействие между процессами.

Каждый поток имеет свой собственный стек вызовов, но может обращаться к общим данным других потоков в одном и том же процессе.

Каждый поток имеет свой собственный кеш памяти.

Если поток читает общие данные, он сохраняет эти данные в своем собственном кеше памяти.

Несколько потоков создаются в приложении для обеспечения параллельной или скорее независимой обработки или асинхронного поведения.

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

При этом ускорение программы с помощью многопоточных вычислений на нескольких процессорах ограничено размером последовательной части программы. Это так называемый закон Амдала.

Похожие книги

Основы объектно-ориентированного программирования

Бертран Мейер

Этот фундаментальный учебник посвящен основам объектно-ориентированного программирования и программной инженерии. В нем излагаются ключевые понятия объектной технологии: классы, объекты, управление памятью, типизация, наследование и универсализация. Особое внимание уделяется проектированию по контракту и обработке исключений, как важным механизмам для обеспечения корректности и устойчивости программных систем. Книга основана на работах Б. Мейера и предлагает глубокое понимание объектно-ориентированного программирования.

Искусство обмана

Юрий Викторович Щербатых, Вильям Л Саймон

Эта книга – увлекательное и глубокое исследование феномена обмана. Авторы, объединив научный подход с доступностью изложения, анализируют психологические и социальные аспекты обмана, рассматривая его как неотъемлемую часть человеческой истории и эволюции. Книга рассматривает историю обмана, его формы и методы, а также механизмы восприятия и противостояния обману. В ней представлены примеры из различных культур и исторических периодов, позволяя читателю глубже понять природу этого сложного явления. Искусство обмана – это не просто описание, но и попытка понять и осмыслить причины и последствия обмана в жизни человека. Книга адресована всем, кто интересуется психологией, социологией, историей и хочет узнать больше об этом важном аспекте человеческого взаимодействия.

Искусство вторжения

Кевин Митник, Вильям Л Саймон

Эта книга, написанная Кевином Митником и Вильямом Саймоном, представляет собой увлекательный сборник историй о хакерских вторжениях. Авторы, являющиеся экспертами в области кибербезопасности, рассказывают о реальных историях взломов, подчеркивая не только технические аспекты, но и мотивы, риски и последствия таких действий. Книга предоставляет уникальный взгляд на мир хакеров, позволяя читателям понять сложную динамику киберпреступности и кибербезопасности. Она не только повествует о хакерских приключениях, но и служит ценным руководством для профессионалов в области информационных технологий, позволяя им повысить уровень безопасности своих систем. Книга также будет интересна широкому кругу читателей, интересующихся криминальными историями и приключениями.

Искусство быть невидимым

Кевин Митник

В книге "Искусство быть невидимым" Кевин Митник, эксперт в области компьютерной безопасности, исследует актуальную проблему защиты личной информации в эпоху больших данных. Книга основана на реальных примерах и опыте автора, раскрывая сложные вопросы интернет-безопасности и конфиденциальности. Митник рассматривает не только технические аспекты защиты, но и психологические факторы, влияющие на нашу безопасность в цифровом пространстве. Он объясняет, почему защита данных – это не просто право, а необходимость в современном мире, где каждый наш шаг отслеживается и анализируется. Книга предоставляет практические советы и рекомендации, помогающие читателям защитить свою личную информацию и контролировать свою цифровую жизнь.