Справочник от Автор24
Найди эксперта для помощи в учебе
Найти эксперта
+2

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

Определение 1

Многопоточное программирование — это выполнение кода приложения в различных потоках.

Введение

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

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

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

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

В разных информационных источниках можно встретить разные определения процессов и потоков. Данный разброс определений объясняется следующими аспектами:

  1. Процессом эволюции операционных систем, который приводил к модификации понятий о процессах и потоках.
  2. Наличием различных точек зрения, с которых осуществляется рассмотрение этих понятий.

С позиций рядового пользователя можно привести следующие определения:

  1. Процессом является экземпляр программы во время ее исполнения.
  2. Потоком являются ветви кода, которые выполняются в параллельном режиме, то есть, без определенного временного порядка.
«Многопоточное программирование» 👇
Помощь эксперта по теме работы
Найти эксперта
Решение задач от ИИ за 2 минуты
Решить задачу
Найди решение своей задачи среди 1 000 000 ответов
Найти

А с позиций операционной системы существуют такие определения:

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

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

В варианте, когда одна программа исполняет большое количество задач, реализация поддержки множества потоков внутри одного процесса может позволить выполнить:

  1. Разделение ответственности за разные задачи между разными потоками.
  2. Повышение быстродействия.

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

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

Операционная система рассматривает процесс, как заявку на различные типы ресурсов, то есть, на ресурсы памяти, файлы и прочее, но не на ресурс процессорного времени. А поток является именно заявкой на процессорное время. Процесс выступает всего лишь как метод группировки взаимосвязанных данных и ресурсов, а поток является единицей исполнения (unit of execution), которая выполняется на процессоре.

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

Поток может быть в одном из следующих состояний:

  1. Состояние выполнения (Executing), то есть, поток, исполняется в этот момент на процессоре.
  2. Состояние готовности (Runnable), то есть, поток ожидает получения кванта времени и находится в готовности к выполнению назначенных ему инструкций. Планировщик должен выбрать очередной поток для исполнения только из готовых потоков.
  3. Состояние ожидания (Waiting), то есть, работа потока является заблокированной в ожидании блокирующей операции.

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

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

Воспользуйся нейросетью от Автор24
Не понимаешь, как писать работу?
Попробовать ИИ
Дата написания статьи: 08.07.2022
Найди решение своей задачи среди 1 000 000 ответов
Крупнейшая русскоязычная библиотека студенческих решенных задач
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot