Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы по информатике.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
127.94 Кб
Скачать

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

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

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

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

В зависимости от ситуации нити могут находиться в трех состояниях. Во-первых, нить может выполняться, когда ей выделено процессорное время, т.е. она может находиться в состоянии активности. Во-вторых, она может быть неактивной и ожидать выделения процессора, т.е. быть в состоянии готовности. И есть еще третье, тоже очень важное состояние - состояние блокировки. Когда нить заблокирована, ей вообще не выделяется время. Обычно блокировка ставится на время ожидания какого-либо события. При возникновении этого события нить автоматически переводится из состояния блокировки в состояние готовности. Например, если одна нить выполняет вычисления, а другая должна ждать результатов, чтобы сохранить их на диск. Вторая могла бы использовать цикл типа "while( !isCalcFinished ) continue;", но легко убедиться на практике, что во время выполнения этого цикла процессор занят на 100 % (это называется активным ожиданием). Таких вот циклов следует по возможности избегать, в чем оказывает неоценимую помощь механизм блокировки. Вторая нить может заблокировать себя до тех пор, пока первая не установит событие, сигнализирующее о том, что чтение окончено.

Программа, выполняющая несколько действий одновременно, создает объекты, которые называются потоками или нитями (threads).

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

Поток выполняет одну часть приложения и ему выделяется процессорное время операционной системой.

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

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

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

управление вводом от нескольких устройств.

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

для приложений с многодокументным интерфейсом (MDI) потоки для дочерних окон

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

Учтите: не все операционные системы осуществляют истинную многопроцессорную обработку, даже когда это поддерживается используемым оборудованием. Например, Windows 9x только моделирует многопроцессорную обработку, даже если используемое оборудование поддерживает это !

Также, при создании потоков следует учитывать, что слежение за слишком многими потоками потребляет процессорное время; рекомендованный предел - 16 активных потоков на процесс на системах с одним процессором.