Потоки
Процесс – объект, который создается Операционной Системой для приложения (не для приложения .NET) в момент его запуска. Характеризуется собственным адресным пространством, которое напрямую недоступно другим процессам.
Поток. В рамках процесса создаются потоки (один – первичный – создается всегда). Это последовательность выполняемых команд процессора. В приложении может быть несколько потоков (первичный поток и дополнительные потоки).
Потоки в процессе разделяют совместно используемые данные и имеют собственные стеки вызовов и локальную память потока (Thread Local Storage – TLS). TLS потока содержит информацию о ресурсах, используемых потоком, о регистрах, состоянии памяти, выполняемой инструкции процессора.
Общее управление выполнением потоков осуществляется на уровне ОС. Нет ничего, кроме выполняющихся потоков, которыми руководит управляющий поток ОС. В этом управляющем потоке принимается решение относительно того, на протяжении какого времени будет выполняться данный поток. Управляющий поток ОС прерывает выполнение текущего потока, состояние прерванного потока фиксируется в TLS, после чего управление передается другому потоку.
В приложении все потоки выполняются в рамках общего адресного пространства. И хотя организация взаимодействия между потоками, выполняемыми в общем процессе, проще, при этом все равно требуется специальный инструментарий (критические секции, мьютексы и семафоры) и остается множество проблем, решение которых требует внимания со стороны программиста.
Для обеспечения взаимодействия потоков в разных процессах используются каналы, обмен информацией через которые обеспечивается специальными системными средствами.
МНОГОПОТОЧНАЯ ОС. Прежде всего операционная система должна допускать параллельную (псевдопараллельную) работу нескольких программ.
Многопоточное приложение: отдельные компоненты работают одновременно (псевдоодновременно), не мешая друг другу.
Случаи использования многопоточности:
- выполнение длительных процедур, ходом выполнения которых надо управлять;
- функциональное разделение программного кода: пользовательский интерфейс – функции обработки информации;
- обращение к серверам и службам Интернета, базам данных, передача данных по сети;
- одновременное выполнение нескольких задач, имеющих различный приоритет.
Виды многопоточности:
- Переключательная многопоточность. Основа – резидентные программы. Программа размещалась в памяти компьютера вплоть до перезагрузки системы, и управление ей передавалось каким-либо заранее согласованным способом (предопределенной комбинацией клавиш на клавиатуре).
- Совместная многопоточность. Передача управления от одной программы другой. При этом возвращение управления – это проблема выполняемой программы. Возможность блокировки, при которой аварийно завершаются ВСЕ программы.
- Вытесняющая многопоточность. ОС централизованно выделяет всем запущенным приложениям определенный квант времени для выполнения в соответствии с приоритетом приложения. Реальная возможность работы нескольких приложений в ПСЕВДОПАРАЛЛЕЛЬНОМ режиме. "Зависание" одного приложения не является крахом для всей системы и оставшихся приложений.