Вы, наверное,ожидаете что услышите стандартный рассказ о процессах и потока.Нет. Но нам надо разобраться с тем что это такое?
- Процесс - экземпляр выполняемого приложения. При запуске приложения происходит выделение памяти под процесс, в часть которой и загружается код программы.
- Поток - объект внутри процесса, отвечающий за выполнение кода и получающий для этого процессорное время.
Так мы разобрались,и узнали что такое процесс и поток, но нам этого не достаточного для понимая, и нужно надо задуматься,а также разобраться в элементах. И так какие элементы процесса ?
Элементы процесса:
- Адресное пространство
- Потоки
- Открытые файлы
- Дочерние процессы
Так теперь мы знаем элементы процесса, но что-то не то, если потоки-это процесс выполнения на процессоре набора инструкций, точнее говоря программного кода., открытые файлы - это общедоступная спецификация хранения цифровых данных., дочерние процессы - это процесс, который создается другим процессом и называется родительским процессом и не понятно что такое адресное пространство? Адресное пространство - это не только пространство в оперативной памяти (начало адресов и конец), но также может иногда использоваться и виртуальная память. Адресное пространство - это абстрактная вещь, через которую программа может получать доступ к памяти например так: memory[0], не зная к какой памяти вообще обращается, а доступ к оперативной или виртуальной памяти обеспечивают другие вещи.
После разбора элементов процесса,остается открытый вопрос, какие элементы потока?
Элементы потока:
- Счётчик команд
- Регистры
- Стек
Наверное стоит немного пояснить. Счётчик команд - регистр процессора, который хранит адрес ячейки памяти, в которой содержится команда, которую необходимо выполнить следующей. Регистр — устройство для записи, хранения и считывания n-разрядных двоичных данных и выполнения других операций над ними. Стек - это абстрактный тип данных, представляющий собой список элементов.
Теперь мы точно может углубиться в изучение Процесса и потока, мы разберем парочку примеров.
Пример №1(процесс):
Два студента запускают на одной ВС (вычислительная система) программу извлечения квадратного корня. Один хочет вычислить квадратный корень из 4, а второй – из 1.
С точки зрения студентов: запущена одна и та же программа
С точки зрения ВС: запущено два различных вычислительных процесса, так как разные исходные данные приводят к разному набору вычислений.
Пример №2(процесс):
Два студента пытаются выполнить идентичные задания, но запущенные в ВС с некоторым сдвигом во времени - извлечь квадратный корень из 1.
В то время как 1-ое задание приступило к печати полученного значения и ждет окончания операции ввода-вывода, а 2-ое только начинает исполняться.
Исходя из данных примеров мы можем прийти к выводу, что процесс характеризует некоторую обособленную совокупность набора исполняющихся команд, которые в свою очередь выделенная для исполнения память или адресное пространство, стеки, используемые файлы и устройства ввода-вывода и так далее.
Так надо немного нужно пояснить что такое обособленность Это процесс который нужен для того, чтобы защитить один процесс от другого, поскольку они, совместно используя все ресурсы вычислительной системы, конкурируют друг с другом за доступ к ним.
Предпосылки появления потоков
При необходимости взаимодействия, процессы обращаются к ОС (Операционная система), которая, выполняя функции посредника, предоставляет им средства межпроцессной связи – конвейеры, разделяемую память и других, стоит отметить что такой способ взаимодействия параллельно действующих процессов является достаточно затратным(требуются дополнительные затраты времени на переключение контекста). К тому же на создание каждого процесса ОС тратиться системные ресурсы.
Почему нужна поддержка множества потоков внутри одного процесса?
Поддержка множества потоков внутри одного процесса нужна потому, что для работы программы обычно требуется выполнение множества задач. Такую возможность могут предоставлять потоки внутри процесса, таким образом они используют адресное пространство процесса, которому принадлежат.
Стоит отметить что, можно было бы создать ещё один процесс под эту задачу, но:
- У процесса будет отдельное адресное пространство и данные.
- По вопросам производительности: создание и уничтожение процесса дороже, чем создание потока.
Отличие процесса от потока
Процесс описывает выполняющуюся программу, а сама программа же, её процедуры выполняются в потоках. Главное надо понимать, что программа - это не один поток.
Программа - это набор взаимодействующих между собой потоков, и может быть, даже процессов.
Конечно, может быть 1 поток, если это какая-то совсем простая программа. Более того, в самых простейших операционных системах процесс имеет только единственный поток выполнения, поэтому в таких случаях размываются границы между потоками и процессами.
Состояния процесса
Состояния потоков
В операционной системе выполняет планирование потоков, принимая во внимание их состояние. В мультипрограммной системе поток может находиться в одном из трех основных состояний:
- Выполняемый - поток, который выполняется в текущий момент на процессоре
- Готовый - поток ждет получения кванта времени и готов выполнять назначенные ему инструкции. Планировщик выбирает следующий поток для выполнения только из готовых потоков.
- Заблокированный - работа потока заблокирована в ожидании блокирующей операции
Операции над процессами
Нужно разобраться в операциях над процессами, всего их три:
- Создание процесса – завершение процесса (одноразовые);
- Запуск процесса - приостановка процесса (перевод из состояния исполнение в состояние готовность);
- Блокирование процесса – разблокирование процесса (перевод из состояния ожидание в состояние готовность).
Но есть еще непарная операция: изменение приоритета процесса
Мы не определили что такое многозадачность, и для чего она вообще нужна.
Что такое многозадачность
Многозадачность - это свойство, позволяющее обеспечивать выполнение сразу нескольких задач на одном процессоре. Многозадачность может быть параллельной (если каждая задача выполняется на отдельном процессоре) или псевдопараллельной (если задачи выполняются на одном процессоре).
Для чего нужна многозадачность?
Если простым языком, многозадачность позволяет запускать сразу несколько программ на компьютере.
Но мы с вами умные, и простой язык на не подойдет, по этому многозадачность нужна для того, чтобы на процессоре могли выполняться сразу несколько потоков. Данная необходимость возникла потому, что крайне нежелательная пустая трата процессорного времени, то есть простаивание процессора. Простаивание возникает тогда, когда какой-либо поток блокируется в ожидании результата блокирующей операции. Тогда, лучше отдать процессорное время другому потоку, чтобы процессор не простаивал, таким образом повышая производительность.
После изучение информации про многозадачность, остается один открытый вопрос что такое Кэширование данных?
Кэширование данных
Для начала мы разберем что такое кэширование — это процесс сохранения данных локально, который позволяет быстрее получить к ним доступ при будущих запросах.
Но стоит уточнить что для ускорения доступа к данным используется принцип кэширования (который описан выше). В вычислительных системах существует иерархия запоминающих устройств:
- Нижний уровень занимает емкая, но относительно медленная дисковая память;
- Оперативная память;
- Верхний уровень – сверхоперативная память процессорного кэша.
Но нужно не забывать важную составляющую, что каждый уровень играет роль кэша по отношению к нижележащему.
Теперь мы плавно переходим к выводу :)
Вывод
Процесс - это всего лишь способ сгруппировать взаимосвязанные данные и ресурсы, а потоки - единица выполнения, которая распределяется и выполняется на процессоре.
На этом пожалуй все, иначе информации станет слишком много. Потоки, процессы являются очень интересной и обширной темой. Сегодня мы лишь приоткрыли занавес в этой тематике, чтобы вы имели представление об этих терминах и принципах их работы.