Потоки. Многопоточность

Процесс можно рассматривать как способ объединения в группу родственных ресурсов (адресное пространство, файлы, устройства ввода/вывода). С другой стороны, процесс можно рассматривать как поток исполняемых команд. Поток - последовательность исполняемых команд. У потока есть счетчик команд, регистры, локальные переменные и стек, содержащий протокол выполнения процесса. В стеке хранится по одному фрейму на каждую вызванную, но не завершенную функцию. Концепция многопоточности дает возможность одновременного выполнения в одной и той же среде нескольких достаточно независимых команд. В многопоточном процессе потоки работают поочередно. Псевдопараллельность создается за счет быстрого переключения процессора между разными потоками.

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

|Элементы процесса: |Элементы потока: |

|1)адресное пространство; |1)счетчик команд; |

|2)глобальные переменные; |2)регистры; |

|3)открытые файлы; |3)стек функций; |

|4)дочерние процессы; |4)состояния. |

|5)информация об | |

|использовании ресурсов. | |

Поток может находится в одном из состояний:

- готовность;

- выполнение;

- блокировка;

- завершение.

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

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

thread_create

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

Завершить работу потока можно с помощью функции thread_exit. С помощью функции thread_wait один поток может ожидать окончания выполнения другого потока. С помощью функции thread_yield поток может добровольно передать управление другому потоку. Если не указан поток, которому передается управление, запускается планировщик потоков, который выбирает один из находящихся в состоянии готовности потоков текущего процесса. Реализация этой функции очень важна для повышения эффективности многопоточных систем, поскольку, в случае потоков, не существует прерывания по таймеру, позволяющему переключаться между процессами через определенные промежутки времени.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: