Многопоточность

Опубликовано пользователем Бессонов Л.В. 15.11.2009г.

Понятие потока

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

Поток можно рассматривать как часть программы, которая может выполняться "одновременно" с другими частями. В лекционном курсе при решении проблемы производителя и потребителя мы вводили две функции: void consumer(); void producer(). Обе эти функции могут выполняться "одновременно". Т.е. код обоих функций выполнятется таким образом как будто каждая из них преставляет собой отдельную запущенную программу. Слово "одновременно" берётся в кавычки специально (вспомните из лекционного курса эффект псевдопараллельности выполнения).

В операционных системах с вытесняющей многозадачностью потоки выполняются по очереди в течение определенного времени (квант времени). Размер кванта зависит от множества факторов: архитектура и настройка ОС, приоритета потока, загруженности процессора  и прочее. Когда один поток отработал свой квант времени – ОС переключается на выполнение другого потока.

При запуске программы загрузчик всегда создает один поток – главный. В главном потоке программа начинает своё выполнение. Главный поток может содержать системные вызовы, запускающие вторичные вычислительные потоки.

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

Использование потоков

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

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

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

Баннер SGU.RU