Содержание
- 1 Планирование потоков
- 2 Чем процесс отличается от потока?… | БCБ на WordPress.com
- 3 Многозадачность и параллелизм
- 4 Сколько нужно ядер и потоков современному обывателю?
- 5 На что влияет количество ядер компьютера, ноутбука?
- 6 Как узнать сколько потоков у процессора
- 7 Поток в процессоре – он же логический процессор
- 8 Мощность аккумулятора и длительность автономной работы
- 9 Вместо итогов
Планирование потоков
Для того чтобы понимать, в каком порядке исполнять код различных потоков, необходима организация планирования тих потоков. Ведь система может иметь как одно ядро, так и несколько. Как иметь эмуляцию двух ядер на одном так и не иметь такой эмуляции. На каждом из ядер: железных или же эмулированных необходимо исполнять как один поток, так и несколько. В конце концов система может работать в режиме виртуализации: в облаке, в виртуальной машине, песочнице в рамках другой операционной системы. Поэтому мы в обязательном порядке рассмотрим планирование потоков Windows. Это — настолько важная часть материала по многопоточке, что без его понимания многопоточка не встанет на своё место в нашей голове никоим образом.
Итак, начнём. Организация планирования в операционной системе Windows является: гибридной. С одной стороны моделируются условия вытесняющей многозадачности, когда операционная система сама решает, когда и на основе каких условия вытеснить потоки. С другой стороны — кооперативной многозадачности, когда потоки сами решают, когда они всё сделали и можно переключаться на следующий (UMS планировщик). Режим вытесняющей многозадачности является приоритетным, т.к. решает, что будет исполняться на основе приоритетов. Почему так? Потому что у каждого потока есть свой приоритет и операционная система планирует к исполнению более приоритетные потоки. А вытесняющей потому, что если возникает более приоритетный поток, он вытесняет тот, который сейчас исполнялся. Однако во многих случаях это бы означало, что часть потоков никогда не доберется до исполнения. Поэтому в операционной системе есть много механик, позволяющих потокам, которым необходимо время на исполнение его получить несмотря на свой более низкий по сравнению с остальными, приоритет.
Уровни приоритета
Windows имеет 32 уровня приоритета (0-31)
- 1 уровень (00 — 00) — это Zero Page Thread;
- 15 уровней (01 — 15) — обычные динамические приоритеты;
- 16 уровней (16 — 31) — реального времени.
Самый низкий приоритет имеет Zero Page Thread. Это — специальный поток операционной системы, который обнуляет страницы оперативной памяти, вычищая тем самым данные, которые там находились, но более не нужны, т.к. страница была освобождена. Необходимо это по одной простой причине: когда приложение освобождает память, оно может ненароком отдать кому-то чувствительные данные. Личные данные, пароли, что-то ещё. Поэтому как операционная система так и runtime языков программирования (а у нас — .NET CLR) обнуляют получаемые участки памяти. Если операционная система понимает, что заняться особо нечем: потоки либо стоят в блокировке в ожидании чего-либо либо нет потоков, которые исполняются, то она запускает самый низко приоритетный поток: поток обнуления памяти. Если она не доберется этим потоком до каких-либо участков, не страшно: их обнулят по требованию. Когда их запросят. Но если есть время, почему бы это не сделать заранее?
Продолжая говорить о том, что к нам не относится, стоит отметить приоритеты реального времени, которые когда-то давным-давно таковыми являлись, но быстро потеряли свой статус приоритетов реального времени и от этого статуса осталось лишь название. Другими словами, Real Time приоритеты на самом деле не являются таковыми. Они являются приоритетами с исключительно высоким значением приоритета. Т.е. если операционная система будет по какой-то причине повышать приоритет потока с приоритетом из динамической группы (об этом — позже, но, например, потому, что потоку освободили блокировку) и при этом значение до повышения было равно , то повысить приоритет операционная система не сможет: следующее значение равно , а оно — из диапазона реального времени. Туда повышать такими вот «твиками» нельзя.
Чем процесс отличается от потока?… | БCБ на WordPress.com
В предыдущем посте, я рассказал Вам о понятии процесса в ОС. Сегодня же, я изложу более подробно о потоке, его отличии от процесса, а с помощью своих чудо-рук, ты сможешь создать консольный вариант Диспетчера задач (такой, немного убогий и без функции конечно…ну все-таки).
Первое, что надо усвоить — процесс состоит хотя бы из одного потока. В ОС каждому процессу соответствует адресное пространство и одиночный управляющий поток. Фактически это и определяет процесс.
С одной стороны, процесс можно рассматривать как способ объединения родственных ресурсов в одну группу. У процесса есть адресное пространство, содержащее текст программы и данные, а также другие ресурсы. Ресурсами являются открытые файлы, дочерние процессы, необработанные аварийные сообщения, обобработчики сигналов, учетная информация и многое другое. Гораздо проще управлять ресурсами, объединив их в форме процесса.
С другой стороны, процесс можно рассматривать как поток исполняемых кокоманд или просто поток. У потока есть счетчик команд, отслеживающий порядок выполнения действий. У него есть регистры, в которых хранятся текущие переменные. У него есть стек, содержащий протокол выполнения процесса, где на каждую процедуру, вызванную, но еще не вернувшуюся, отведен отдельный фрейм. Хотя поток должен исполняться внутри процесса, следует различать концепции потока и процесса. Процессы используются для группирования ресурсов, а потоки являются объектами, поочередно исполняющимися на центральном процессоре.
Концепция потоков добавляет к модели процесса возможность одновременного выполнения в одной и той же среде процесса нескольких программ, в достаточной степени независимых. Несколько потоков, работающих параллельно в одном процессе, аналогичны нескольким процессам, идущим параллельно на одном компьютере. В первом случае потоки разделяют адресное пространство, открытые файлы и другие ресурсы. Во втором случае процессы совместно пользуются физической памятью, дисками, принтерами и другими ресурсами. Потоки обладают некоторыми свойствами процессов, поэтому их иногда называют упрощенными процессами. Термин многопоточность также используется для описания использования нескольких потоков в одном процессе.
Любой поток состоит из двух компонентов:
объекта ядра, через который операционная система управляет потоком. Там же хранится статистическая информация о потоке(дополнительные потоки создаются также ядром); стека потока, который содержит параметры всех функций и локальные переменные, необходимые потоку для выполнения кода.
Подводя черту, закрепим: главное отличие процессов от потоков, состоит в том, что процессы изолированы друг от друга, так используют разные адресные пространства, а потоки, могут использовать одно и то же пространство (внутри процесса) при этом, выполняя действия не мешаяя друг другу. В этом и заключается удобство многопоточного программинга: разбив приложение на несколько последовательных потоков, мы можем увеличить производительность, упростить пользовательский интерфейс и добиться масштабируемости (если Ваше приложение установят на многопроцессорную систему, выполняя потоки на разных процах, ваша прога будет работать с аховой скоростью=)).
Я решил не рассказывать о многопоточном программировании сегодня, тем более что есть отличные мануалы по этой теме(ссылка внизу), а просто познакомиться с тем какие средства есть у CSharp для взаимодействия с потоками и процессами. А что рассказывать? MSDN в соседнее от окошка Class1.cs и вперед…=)
Понять пост не читая или для ленивых:
- Поток (thread) определяет последовательность исполнения кода в процессе.
- Процесс ничего не исполняет, он просто служит контейнером потоков.
- Потоки всегда создаются в контексте какого-либо процесса, и вся их жизнь проходит только в его границах.
- Потоки могут исполнять один и тот же код и манипулировать одними и теми же данными, а также совместно использовать описатели объектов ядра, поскольку таблица описателей создается не в отдельных потоках, а в процессах.
- Так как потоки расходуют существенно меньше ресурсов, чем процессы, старайтесь решать свои задачи за счет использования дополнительных потоков и избегайте создания новых процессов(но подходите к этому с умом).
Ссылка в тему: Основы многопоточного программирования на CSharp: albahari.com/threading/index.html
А почитать еще теории? Рихтер и Таненбаум…
Многозадачность и параллелизм
Многозадачные системы позволяют запускать несколько задач одновременно. Многозадачность не обязательно обозначает истинную параллельность выполнения задач: такие системы существуют достаточно давно и появились тогда, когда процессоры были одноядерными. Все задачи получают от планировщика временной промежуток, в течение которого выполнять работу. После чего задача переходит в состояние ожидания. Все задачи имеют свой приоритет, соответственно, чем выше приоритет, тем больше времени задача может работать.
Многозадачные системы на однопоточном процессоре создают иллюзию синхронного выполнения нескольких процессов. Пусть у нас есть три процесса. Если каждый из них работает время t1, t2 и t3, то общее время выполнения будет равно t1+ t2 + t3.
Последовательное выполнение трёх процессов на однопоточном процессоре
Если теперь мы разобьём каждую из задач на N частей, то общее время выполнения будет dt1*N+dt2*N+dt3*N+dts*N*N, где dts – это время, затрачиваемое на восстановление контекста выполнения задачи (на работу планировщика).
Работа каждого процесса на однопоточном процессоре разбита на временные промежутки
С одной стороны, последовательное выполнение трёх задач без накладных расходов на переключение между задачами должно быть гораздо быстрее. Однако на практике часто бывает иначе. Если процесс выполняет много операция ввода-вывода или работает с внешними ресурсами, то большую часть времени он простаивает, ожидая данные. Это время простоя занимает другая задача. Таким образом, общее время выполнения становится меньше.
Когда процесс большую часть своего времени простаиват в ожидании ресурсов, то параллельное выполнение нескольких задач может происходить быстрее, чем последовательное
Если у нас имеется одна «числодробительная» задача, то никакого преимущества не будет.
Но стоит помнить, что в ряде случаев даже на одноядерном процессоре такая искусственная параллелизация может существенно ускорить выполнение.
Для многоядерных систем всё яснее: если задача разбита на несколько потоков, то каждый из них может выполняться реально параллельно. То есть, если решать задачу в 4 потока вместо одного, то потенциально она станет работать в 4 раза быстрее. Очевидно, что где-то есть подвох…
Во-первых, ускорение работы с увеличением числа процессоров и ядер растёт нелинейно и имеет для данной задачи какой-то потолок (см. закон Амдала).
Сколько нужно ядер и потоков современному обывателю?
Как я уже сказал выше, современные ОС падки на ресурсы процессора, поскольку отнимают часть мощностей на собственные службы, интерфейс, красивости и функции защиты в реальном времени. Но при этом пользователь хочет еще и работать с комфортом.
p, blockquote 13,0,0,0,0 —>
- По-хорошему, для офисной работы будет вполне достаточно 2‑ядерных ЦП, но при этом учитывайте, что одновременно работать с браузером, текстовыми редакторами, почтовым клиентом и проигрывателем, не получится – система попросту не справится. А если использовать топологию 2 ядра/4 потока, то ситуация в корне преображается – рук то больше.
- Игры требуют уже больше ресурсов. Начнем с того, что современные проекты очень падки на ресурсы чипа. Взять к примеру, ту же GTA V или Watch Dogs 2: они способны выжимать все соки из любого камня, поскольку параллельно отрисовывают сцены игры (скрипты), просчитывают окружение, прорабатывают звук, поведение искусственного интеллекта и не только. И все эти процессы еще нужно синхронизировать надлежащим образом.
- А если копнуть в задачи типа программирования, рендеринга и профессиональной работы с графики, то видно, что здесь и 4‑ядерные/8‑поточные чипы начинают захлебываться и работают на износ.
p, blockquote 14,0,0,1,0 —>
На что влияет количество ядер компьютера, ноутбука?
Многозадачность
Изображение 3. Многозадачность компьютера.
Как уже было сказано чуть выше, количество ядер центрального процессора влияет на его производительность. А именно – на многозадачность. Приведем простой пример:
- Представьте себя в роли стримера. Кроме того, что Вы должны будете играть в какую-либо компьютерную игру с максимальными графическими настройками, Вам также придется параллельно запускать программу, позволяющую записывать и транслировать Ваш игровой процесс через Интернет в режиме реального времени. К тому же, в процессе всего этого занятия Вам придется пользоваться браузером с двумя и более открытыми вкладками. Ведь в процессе игры Ваши зрители будут оставлять Вам комментарии, которые следует читать и давать на них ответы. В противном случае Вы потеряете свою аудиторию.
- Не каждый двухъядерный процессор способен обеспечить стабильную работу даже одной только игры. Что уж говорить обо всем выше перечисленном наборе? Чтобы с комфортом вести прямую трансляцию в режиме онлайн, Вам понадобится компьютер, как минимум, с четырехъядерным процессором, чтобы на одну программу приходилось по одному ядру.
Энергопотребление
Тот факт, что чем мощнее компьютер, тем больше он потребляет электроэнергии, не должен быть ни для кого секретом. Компьютеры с многоядерными процессорами потребляют на порядок больше электроэнергии и данная проблема является актуальной только в том случае, если Ваше устройство имеет слабый аккумулятор и не подключено к розетке.
Перегрев
Изображение 4. Влияние ядер процессора на перегрев компьютера.
- Еще один важный параметр, на который влияет количество ядер – температура процессора и других компонентов компьютера. Как выше уже было сказано, компьютеры с многоядерными процессорами потребляют большое количество энергии и, соответственно, выделяют больше тепла.
- Например, некоторые центральные процессоры с шестью и более ядрами от производителя AMD способны нагреваться до 40 – 45 градусов по Цельсию даже тогда, когда пользователь не выполняет на компьютере никаких действий. При максимальной нагрузке на ПК, его процессор может разогреться до 70 градусов и выше. При такой температуре может случиться перегрев и компьютер отключится. Хорошо, если вообще не сгорит.
Изображение 5. Измеряем температуру процессора и других комплектующих компьютера программой AIDA64.
Отслеживать температуру процессора и других комплектующих компьютера можно с помощью специальной программы AIDA64, которая в прошлом носила гордое название Everest
Программа является платной, однако бесплатную версию можно скачать с популярного портала SoftPortal по этой ссылке
Температура отображается в разделе «Датчики», который располагается на вкладке «Компьютер».
Опираясь на все выше сказанное можно прийти к выводу, что при покупке компьютера с многоядерным процессором, крайней важно уделить особое внимание его системе охлаждения. Как правило, мощные ноутбуки оснащены достаточной системой охлаждения
Но, при необходимости можно приобрести специальную подставку, в которую встроено несколько кулеров для дополнительного отвода тепла от девайса и повышения его производительности.
Изображение 6. Дополнительное охлаждение для ноутбука в виде подставки с кулерами.
Со стационарными системными блоками дела обстоят проще. Во-первых, если Вы обнаружите, что Ваш компьютер чрезмерно греется, Вы можете заменить имеющийся у Вас кулер на более мощный или поставить дополнительный. Во-вторых, если и этого окажется мало, можно прибегнуть к старому дедовскому, но при этом эффективному, методу: снимите боковую крышку с системного блока, включите вентилятор и направьте поток воздуха на свое «железо». Отличное охлаждение Вам будет гарантировано. Единственный минус данного способа – шум.
Как узнать сколько потоков у процессора
Само ядро – это непосредственно тот элемент, который отвечает за математические вычисления, согласно принятому в нем алгоритму. Процессор можно назвать своего рода «коробкой» для ядер, он объединяет их и обеспечивает взаимодействие с остальными компонентами системы.
Коротко по сути и маленькая предыстория
Технология Hyper-threading дает возможность хранения двух потоков одновременно. Поэтому при использовании операционной системы Windows, процессор на 2 ядра имеет в своем активе 4 потока. Такие вычислители еще часто называют процессорами, поддерживающими Hyper-treading (гипертрейдинг).
Дорогие и высокопроизводительные процессоры содержат ядра и потоки. Многие считают, что это смежные понятия, однако это не до конца верно. Впервые потоки появились еще в те времена, когда на рынке технологий царствовал Pentium 4.
Среди некоторых пользователей бытовало мнение, что они отрицательно сказываются на производительности. Это утверждение является несколько ошибочным, ведь дело в оптимизации программного обеспечения.
Программ, которые могли корректно использовать данное преимущество было не много, если вообще были. Эта разработка находилась на стадии, своего рода, полевых исследований.
Система сама все о себе знает
Когда пользователь взаимодействует с конкретными программами компьютера, это вовсе не значит, что больше машина ничего не делает. Есть служебные задачи и фоновые процессы, выполнение которых происходит незаметно на первый взгляд.
Чтобы узнать подробную информацию в операционной системе Windows существует «Диспетчер задач», который в том числе покажет, сколько ресурсов компьютера используется в данное время.
Этот инструмент удобен, часто бывает полезен и обладает интуитивно понятным интерфейсом. Для того, чтобы открыть это приложение, нужно одновременно зажать клавиши Ctrl+Alt+Delete.
Так это выглядит на Windows 10. Пользователи Mac OS найдут на своем компьютере утилиту «Принудительное завершение программ», которое легко вызвать при помощи клавиш cmd alt Esc. Она также дает возможность закрыть программу, которая перестала отвечать.
Еще одна популярная операционная система с открытым исходным кодом, Linux, тоже содержит диспетчер задач, только называется он по-другому – «Системный монитор».
Добраться до него помогут 3 простых шага:
- Меню
- Системные утилиты
- Системный монитор
или можно воспользоваться командой
gnome-system-monitor.
Функционал «Системного монитора» полностью соответствуют таковым в «Диспетчере задач» Windows и «Принудительному завершению программ» в операционной системе от компании Apple.
Почему так быстрее
Поток, обработавший одну порцию данных, ожидает получение другой, а если он не получает, то помогает другому потоку. Таким образом достигается максимальное быстродействие, за счет того, что все ресурсы компьютера используются рационально. Он, в какой-то степени, становится более гибким.
Количество потоков всегда вдвое больше, нежели количество ядер (при наличии «на борту» технологии HT). 2 ядра равнозначно 4-ем потокам, 4 ядра равнозначно 8-и потокам. Алгоритм просчета не может бить иным. Авторство разработки принадлежит компании Intel, являющейся лидером в производстве процессоров на массовом потребительском рынке.
Таким образом, одно физическое реальное ядро состоит из двух виртуальных ядер. Не только ОС, но и программы, которые установлены на устройстве, видят это и используют открытый перед ними потенциал возможностей. Если программа поддерживает многопоточность, то работать она будет намного быстрее.
Пошаговое руководство для новичков
Соответственно, чтобы узнать количество потоков, необходимо выяснить количество ядер, содержащихся в процессоре. Для это есть 3 (как минимум) способа:
1. Документация устройства, в которой подробно указаны характеристики.
2. Интернет, где можно ввести модель ноутбука и посмотреть, что находится у него «под капотом».
3. Или же в этом может помочь уже упомянутый ранее «Диспетчер задач», в котором нужно выбрать пункт меню «Производительность».
Так как узнать, сколько потоков у конкретного процессора подскажут полезные информационные поля под диаграммой, дополнительных программ устанавливать не требуется. Поле «Ядра» сообщает о количестве физических ядер, а поле «Логические процессы» подсказывает сколько логических или же виртуальных ядер содержит компьютер.
Проанализировав скриншот выше, становится очевидно, что данная электронно-вычислительная машина, то бишь компьютер, содержит 4 ядра и 8 логических процессов (считай – потоков). Когда значения двух параметров одинаковы, это означает, что данный компьютер не поддерживает технологию HT (Hyper-threading).
Поток в процессоре – он же логический процессор
Для начала вас стоит знать, что поток в современном процессоре может называться еще виртуальным ядром или логическим процессором. По сути все это синонимы.
До появления многопроцессорных систем (материнских плат, на которые можно было устанавливать 2 процессора и более), понятие многозадачности в компьютере было условным. Несмотря на то, что пользователь мог одновременно работать в нескольких приложениях (например слушать музыку и сидеть в интернете), для процессора обрабатывать данные двух программ одновременно было невозможно. Делалось это за счет быстрых и частых переключений процессора с одной задачи на другую так, что пользователь этого просто не замечал. Из-за этих самых переключений сильно страдала скорость работы системы в целом.
Чтобы решить данную проблему и повысить параллельную скорость работы нескольких приложений были придуманы многопроцессорные системы. В них один процессор обрабатывал одну группу задач, а второй – другую.
Материнская плата с двумя процессорами
Но вопрос теперь был в другом. Стоимость таких систем была нецелесообразно высокой из-за сложности построения.
Следующим этапом в развитии процессоров стали гиперпотоки или как их сейчас называют – потоки. Говоря простыми словами, поток в процессоре – это виртуальное ядро, отличающееся от полноценного независимого ядра тем, что у него отсутствует часть узлов, ответственных за организацию и обработку данных. Но регистры, отвечающие за хранение архитектурного состояния, а также кэши у каждого из потоков свои.
Благодаря этому, возрастает скорость обработки многопоточных приложений при меньших трудозатратах, так как себестоимость процессоров с несколькими потоками на порядок ниже многоядерных и многопроцессорных решений. Среди прочих плюсов стоит отметить меньшее энергопотребление и как следствие – меньшее тепловыделение.
В настоящее время процессоры делаются многоядерными и многопоточными. Например, тот же Ryzen 5 2600 имеет 6 ядер, каждое из которых работает в два потока. Итого 12 потоков. Конечно, его нельзя назвать 12 ядерным (хотя многие по ошибке так делают), но производительность его во многих оптимизированных под многопоточность программах и играх будет на порядок выше, чем у аналогичного с 6 ядрами, каждое из которых работает в один поток.
Создание же процессора с полноценными 12 ядрами будет на порядок дороже и сложнее.
Смысл многоядерно-многопоточной реализации – повышение скорости работы и снижение стоимости производства, а также энергопотребления современных процессоров.
Мощность аккумулятора и длительность автономной работы
Если вы планируете использовать ноутбук в поездах и электричках, где отсутствуют розетки электропитания, то вам просто необходимо выбрать модель, работающую без подзарядки максимальное время.
При выборе ноутбука по времени автономной работы необходимо очень тщательно проанализировать всю имеющуюся информацию. Нередко технические параметры, заявленные производителем, совершенно не совпадают с результатами тестов
Поэтому если время автономной работы устройства является для вас очень важной характеристикой устройства, прочитайте независимые обзоры ноутбука в компьютерных журналах. Кроме того, полезную информацию можно узнать на специализированных форумах
Как увеличить длительность автономной работы ноутбука
На длительность работы без подзарядки влияет несколько параметров: мощность процессора, емкость аккумулятора, емкость аккумулятора, яркость дисплея, производительность, использование дополнительных устройств. Существует несколько способов повышения длительности работы устройства, однако все они связаны с различными ограничениями (снижение яркости дисплея, отказ от работы с ресурсоемкими приложениями, отключение сетевой карты или беспроводных адаптеров и т.д.). Но самый простой способ увеличения длительности работы ноутбука – это приобретение запасного аккумулятора, который можно просто возить с собой.
В последних моделях ноутбуков применяется энергосберегающие технологии Intel Speed-Step и AMD PowerNow!, которые регулируют тактовую частоту процессора.
Вместо итогов
Практика показывает, что современный универсальный ПК должен иметь в своем распоряжении как минимум 4 ядра/8 потоков, чего будет достаточно для большинства задач, связанных с обработкой данных. Хотя варианты из серии 6/12 выглядят более обещающими по той причине, что стоят они не намного дороже, а пользы от них больше.
p, blockquote 15,0,0,0,0 —>
В качестве «золотой» середины можем предложить свежий AMD Ryzen 5 2600 , построенный на обновленной архитектуре Zen+. Он отлично справляется с играми, программами, распараллеливанием и обработкой данных, при этом отлично гонится.
p, blockquote 16,0,0,0,0 —>
Надеемся, что вы почерпнули для себя полезную информацию, которая пригодится при подборе процессора для будущей системы. Следите за дальнейшими обновлениями, чтобы не пропустить новые статьи об анатомии ЦП.
p, blockquote 17,0,0,0,0 —>
p, blockquote 18,0,0,0,0 —> p, blockquote 19,0,0,0,1 —>