Потоки.ppt
- Количество слайдов: 11
Процессы Компьютерная программа сама по себе это только пассивная совокупность инструкций, в то время как процесс — это непосредственное выполнение этих инструкций. Часто процессом называют выполняющуюся программу и все её элементы: адресное пространство, глобальные переменные, регистры, стек, открытые файлы и т. д.
Состояние процессов в ОС
Потоки(thread) Пото к выполне ния (thread) — наименьшая единица обработки, исполнение которой может быть назначено ядром операционной системы. В большинстве случаев поток выполнения находится внутри процесса в зависимости от ОС. Несколько потоков выполнения могут существовать в рамках одного и того же процесса и совместно использовать ресурсы, такие как память, тогда как процессы не разделяют этих ресурсов. В качестве аналогии потоки выполнения процесса можно уподобить нескольким вместе работающим поварам. Все они готовят одно блюдо, читают одну и ту же кулинарную книгу с одним и тем же рецептом и следуют его указаниям, причём не обязательно все они читают на одной и той же странице.
Отличия от процессов Процессы, как правило, независимы, тогда как потоки выполнения существуют как составные элементы процессов Процессы несут значительно больше информации о состоянии, тогда как несколько потоков выполнения внутри процесса совместно используют информацию о состоянии, а также память и другие вычислительные ресурсы Процессы имеют отдельные адресные пространства, тогда как потоки выполнения совместно используют их адресное пространство Процессы взаимодействуют только через предоставляемые системой механизмы связей между процессами Переключение контекста между потоками выполнения в одном процессе, как правило, быстрее, чем переключение контекста между процессами. В других операционных системах разница между потоками выполнения и процессами не так велика, за исключением расходов на переключение адресного пространства, которое подразумевает использование буфера ассоциативной трансляции.
Многопоточность позволяет нескольким потокам выполняться в рамках одного процесса. Эти потоки выполнения совместно используют ресурсы процесса, но могут работать и самостоятельно. Однако, пожалуй, наиболее интересное применение технологии имеется в том случае, когда она применяется к одному процессу, что позволяет его параллельное выполнение на многопроцессорной системе.
Взаимодействие потоков В многопоточной среде часто возникают проблемы, связанные с использованием параллельно исполняемыми потоками одних и тех же данных или устройств. Для решения подобных проблем используются такие методы взаимодействия потоков, как взаимоисключения (мьютексы), семафоры, критические секции и события
Состояния потоков
Гонки procedure TForm 1. Create. Thrd(Sender: TObject); begin TFoo. Thread. Create(False); end; procedure TFoo. Thread. Execute; var i: Integer; Begin for i : = 1 to Max. Size do begin Global. Array[i] : = Get. Next. Number; Sleep(5); {приостановить исполнение потока на 5 милисекунд} end;
Критические секции procedure TForm 1. Create. Thrd(Sender: TObject); begin Initialize. Critical. Section(CS); TFoo. Thread. Create(False); end; procedure TFoo. Thread. Execute; var i: Integer; Begin Enter. Critical. Section(CS); {объявление начала критической секции} for i : = 1 to Max. Size do begin Global. Array[i] : = Get. Next. Number; Sleep(5); {приостановить исполнение потока на 5 милисекунд} end; Leave. Critical. Section(CS); {объявление конца критической секции} end;
Mutex Мьютекс обеспечивает те же самые функциональные возможности, что Critacal Section, что делает его не очень востребованным. Единственное преимущество состоит в том, что Mutex доступен из разных процессов, обеспечивая блокировку на уровне компьютера, в отличии от Critacal Section, который действует только на уровне приложения.
Semaphore похож на ночной клуб – он имеет определенную вместимость, которую обеспечивает вышибала. После заполнения никто уже не может войти в ночной клуб, очередь образуется снаружи. Далее, если один человек покидает клуб, один из начала очереди может пройти внутрь. Конструктор Semaphore принимает минимум два параметра – число еще доступных мест и общую вместимость ночного клуба. Semaphore с емкостью, равной единице, подобен Mutex или lock, за исключением того, что он не имеет потока-хозяина. Любой поток может вызвать Release для Semaphore, в то время как в случае с Mutex или lock только поток, захвативший ресурс, может его освободить. В следующем примере по очереди запускаются десять потоков, выполняющих вызов Sleep. Semaphore гарантирует, что не более трех потоков могут вызвать Sleep одновременно:
Потоки.ppt