- •Технология
- •Информационные технологии
- •Базовые информационные процессы
- •Термины и определения
- •Информационное моделирование
- •Уровни информационного моделирования
- •Уровень концептуального моделирования
- •Уровень логического и математического моделирования
- •Уровень алгоритмического и программного моделирования
- •Закон Мура
- •Процессы в операционной системе
- •Процесс
- •Два типа потоков
Закон Мура
В 1960-е годы, в самом начале информационной революции, Гордон Мур, впоследствии один из основателей Intel, обратил внимание на интересную закономерность в развитии компьютеров.
Он заметил, что объём компьютерной памяти удваивается примерно каждые два года. Эта закономерность стала своего рода эмпирическим правилом в компьютерной промышленности, и вскоре оказалось, что не только память, но и каждый показатель производительности компьютера – размер микросхем, скорость процессора и т.д. – подчиняется этому правилу.
В современной формулировке:
Количество транзисторов, размещаемых на кристалле интегральной системы, удваиваются каждые 24 месяца.
Процессы в операционной системе
Операционная система:
Для каждого выполняемого приложения ОС создает процесс
В каждый момент времени ОС работает с множеством процессов
Одна из главных задач ОС состоит в распределении ресурсов между процессами
Ресурсы операционная память и процессорное время
Процесс – владелец ресурсов
Когда ОС создает процесс, то выделяет ему ресурсы
Процесс не выполняет код приложения, следовательно, время процессора непосредственно процессу не выделяется.
Код программы выполняют потоки и именно потокам ОС выделяет процессорное время
При создании процесса ОС создает поток
Процесс
Процесс – абстракция, представляющая программу во время ее выполнения.
Процессу ОС выделяет ресурсы, необходимые для выполнения программы, например:
Адресное пространство процесса содержит его программы код, данные и стек
Файлы используются процессом для чтения входных данных и записи выходных
Устройства ввода-вывода используются в соответствии с их назначением
Процесс – пассивный объект, владелец ресурсов, контейнер для выполнения потоков.
Поток
Поток – абстракция, представлявшая последовательное выполнение команд программы.
Процесс может иметь несколько потоков:
Потоки совместно используют
Глобальные и статические переменные
Динамически распределяемую память (кучу)
Системные ресурсы
Каждый поток имеет свои собственные:
Программный счетчик (IP)
Значение регистров
Локальные переменные
Процесс – совокупность взаимодействующих потоков и выделяемых ресурсов
Зачем нужны процессы с несколькими потоками?
Для параллельной обработки нескольких однотипных запросов
Для разделения исполнительных активностей, параллельно решающих различные задачи
Обеспечение пользовательского интерфейса
Математические вычисления
Фоновая печать
…
Для создания параллельных программ, эффективно использующих аппаратные ресурсы
Для улучшения структуры программы
Состояния потока в многозадачной ОС
Выполнение – состояние работающего потока – обладающего всеми необходимыми ресурсами, в том числе возможностью использования ЦП
Готов к выполнению – поток обладает всеми необходимыми для выполнения ресурсами за исключением ресурса «Время ЦП»
Ожидается – выполнение потока заблокировано до наступления некоторого внешнего события (например, поступления входных данных или освобождения ресурса)
Управление потоками
(2,3) – осуществляются ядром операционной системы (планировщиком)
(4) – продолжение работы невозможно
Для продолжения работы требуется наступление какого-либо события
Поток затребовал недоступный в данный момент ресурс
Поток переводится в состояние ожидания ядром операционной системы во время обработки системного вызова
Поток заблокирован внешним по отношению к нему вызовом
(5) – проводится ядром ОС в момент выполнения условия ожидания.
Постановка задачи планирования
Потокам для выполнения нужен ЦП
Если потоков боле, чем процессор
Вытесняющие алгоритмы планирования….
Выбирают поток и позволяют ему работать некоторое максимально возможное фиксированное время. Если к концу заданного интервала времени поток все еще работает, он приостанавливается, и управление переходит к другому потоку (если существует поток, готовый к исполнению).
Недостатки многопоточного программирования
Велики накладные расходы
На создание и обслуживание потока ОС требуется память и время
Создание и уничтожение потока – это достаточно дорогие операции, поэтому излишнее увлечение много поточностью может привести к потере эффективности работы
Реализация многопоточного приложения требует усложнения алгоритма
Классы, поддерживавшие многопоточное программирование, определены в пространстве имен System.Threading
Основной класс пространства имен – класс Thread
Имя |
Описание |
Sleep() |
Приостанавливает текущий поток на заданное время |
IsAlive |
Возвращает True, если поток запущен |
IsBackground |
True, если поток – «фоновый» |
Join() |
Блокирует вызывающий поток до тех пор, пока указанный поток (тот,, для которого вызван Join()) не завершится |
Start() |
Инструктирует CLRзапустить поток как можно скорее |