Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






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




Язык Java является одним из немногих языков программирования, которые содержат средства поддержки потоков. Потоки можно применить в любой программе при необходимости параллельного выполнения нескольких задач. Так, например, к большинству современных распределенных приложений (Rich Client) и Web-приложений (Thin Client) выдвигаются требования одновременной поддержки многих пользователей, каждому из которых выделяется отдельный поток, а также разделения и параллельной обработки информационных ресурсов. Потоки – средство, которое помогает организовать одновременное выполнение нескольких задач, каждую в независимом потоке. Потоки представляют собой классы, каждый из которых запускается и функционирует самостоятельно, автономно (или относительно автономно) от главного потока выполнения программы.

Не путайте понятия процесс и поток. Процессом можно считать выполняющуюся программу, таким образом, многозадачность (поддерживаемая практически всеми ОС) – это свойство, которое позволяет компьютеру выполнять несколько программ одновременно. Но отдельная программа может выполнять несколько задач одновременно (эти задачи и есть потоки).

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

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

Как вы знаете, Java поддерживает императивную парадигму программирования, и команды программы транслируются в инструкции процессора (фоннеймановской архитектуры), который тот выполняет последовательно.

Одноядерный процессор обрабатывает инструкции следующим образом: в определенный момент времени к процессору поступает очередная инструкция, которая, в зависимости от своего приоритета и других параметров, зависящих от архитектуры процессора[1], становится в очередь. Процессор последовательно выполняет каждую инструкцию (здесь простое описание, в реальности все зависит от архитектуры – процессор может выполнять одну инструкцию, потом по прерыванию переключиться на другую, выполнить её и вернуться к прежней). Это говорит о том, что одноядерный процессор обрабатывает весь поток поступающих команд последовательно, даже если программа написана как многопоточная. Поэтому следует четко понимать, что параллельного выполнения потоков на одноядерном процессоре не будет. Хотя за счет более оптимального использования времени простоя процессора в многопоточном приложении по сравнению с однопоточным, скорость выполнения программы, безусловно, может стать выше.

Интерес к многопоточному программированию вырос после 2005 года, когда стало понятно, что повысить производительность компьютеров за счет повышения тактовой частоты процессора ожидать не приходится[2]. Появились многоядерные процессоры (несколько отдельных процессоров на одном кристалле). Потоки, поступающих на многоядерный процессор инструкций, обрабатываются параллельно ядрами этого процессора, то есть, грубо говоря, очередь разбивается на количество очередей равных количеству ядер (вообще же это зависит от определенного процессора).






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных