Что такое потоки в процессоре и зачем
Skol — мир электроники
Что такое Ядра и потоки в процессорах
Практически каждый в современном мире имеет дело с компьютерами и наверняка сталкивался с терминами ядра и потоки. Давайте разберемся что это и так ли хорошо иметь много ядер и потоков. На рынке компьютерных комплектующих присутствует немало процессоров, у которых число потоков больше числа физических ядер. В некоторых задачах эти «виртуальные ядра» могут дать существенный прирост в производительности, в других они практически бесполезны.
Что такое ядро и поток
Ядро – упрощенно это физическая единица процессора, способная в определенно взятый момент времени выполнять одну последовательность команд. Если ядро одно, а команд много, ядро переключается между ними, выполняя задачи поочередно в зависимости от приоритета.
Поток его еще называют иногда виртуальным ядром – результат работы современных технологий (в процессорах производства компании Intel – эта технология называется Hyper Threading, а у компании AMD – SMT технологией), когда ядро, с помощью специальных технологий, способно разделять свою производительность. Выражение одно ядро и два потока говорит о том, что физически одно ядро, но это ядро виртуально делится на два и позволяет распараллеливать задачи и решать их одновременно. То есть при наличии двух сравнительно «простых задач» процессор сможет выполнить их в два раза быстрее, чем обычный процессор с одним ядром. Примером таких задач могут быть скачивание фоном файлов, работа антивируса. Технология создания потоков позволяют делать несколько параллельных вычислительных каналов, что позволяет использовать способности компьютеров более эффективно, так как если одно из виртуальных ядер закончило свою работу, то может присоединиться к работе другого ядра. Производительность повыситься, но повышение будет ограниченно, так как используются ресурсы (тактовая частота измеряется в МГц– то есть вычислительная способность) физического ядра, которое у нас одно. Только используя специальные программы, работающие с гиперпотоком и при правильной оптимизации можно прочувствовать прирост в производительности.
Можно сделать вывод, что при работе с «простыми» задачами одноядерный процессор с двумя потоками по производительности сопоставим с «настоящими» двухъядерными процессорами, но если задачи будут «сложными» например архивация, рендеринг видео, то для увеличения производительности стоит задуматься о приобретении процессора с большим количеством ядер. Так как многоядерные процессоры более предпочтительны для серьезных задач чем многопоточные.
Какой процессор выбрать
При выборе процессора естественно, что встает вопрос как выбрать оптимальное количество ядер и потоков и не переплачивать. Очевидно, что с количеством ядер и потоков стоимость такого процессора будет значительно возрастать. При выборе оптимального процессора, чтобы не переплачивать и чтобы работало все быстро стоит обратить внимание на задачи стоящие перед вашим компьютером:
1) Если компьютер будет офисным для работы без использования серьезных программ, то достаточно 2 «настоящих» ядра. Данный процессор вполне справляется с большинством задач в современных условиях.
2) Если вы собираетесь играть в игры, то многие игры поддерживают 2-4 ядра. Наличие большего количества ядер, не будет ускорять процесс, так как они будут работать в холостую, а учитывая, что в многоядерных процессорах частота у ядер ниже, то вы столкнетесь с тем, что ваш компьютер стоил кучу денег, а в итоге игры тормозят.
3) Если вы используете компьютер в проектировании и обработке видео в своей профессиональной деятельности, то от количества ядер напрямую будет зависеть производительность этого процесса и здесь лучше иметь не меньше 4 ядер. Большее количество ядер будет только преимуществом и если бюджет позволяет, то возьмите хотя бы 8 ядер.
Рекомендации на конкретные модели в зависимости от стоящих перед ним задач:
1. Офисные: Процессоры Intel: Pentium Dual-Core, Core i3 любого поколения; процессоры AMD: A-серии, Ryzen 3 1200.
2. Игровые: Процессоры Intel: Core i3/i5/i7 6-го и выше поколения; процессоры AMD: Ryzen-5/ Ryzen 7.
3. Профессиональные: Процессоры Intel: Core i7 6950X, Core i9 9980XE; процессоры AMD: Threadripper 2920X, Threadripper 2970WX.
Узнать, сколько у вас физических ядер можно, через встроенную утилиту msinfo32.exe
Как включить виртуальные ядра читайте в этой статье
Поток и процессы в операционной системе, процессоре и программировании
Процессы и потоки в операционной систем е ( ОС)
Для программиста же о перационная система является всего лишь программой или задачей, которую выполняет устройство. ОС имеет «глубокий» доступ к аппаратным системам устройства: процессору, материнской плате, видеокарте, аудиокарте, периферийному оборудованию и т. д., поэтому пользователи считают, что она выполняет несколько задач на компьютере. Хотя она контролирует всего лишь процессы.
Процесс на компьютере — это любое отдельно запущенное приложение. Например, открытый браузер, антивирусная программа, Skype, трей и др. — все это отдельные процессы на компьютере. Каждый отдельный процесс способен существовать отдельно друг от друга. Помимо тех процессов, которые видны пользователю на экране компьютера или которые он запустил самостоятельно, существует множество служебных процессов. Служебные процессы не видны сразу, для того чтобы их увидеть, необходим о к ак миниму м з апустить «Диспетчер задач».
Каждый отдельный процесс потребляет ресурсы устройства. Главная задача любой операционной системы — контроль потребляемых ресурсов компьютера, а также их ограничение и распределени е между всеми процессами, которые на них претендуют. Главными ресурсами компьютера являются:
Задачу операционной системы в компьютере мы выяснили. Задачей программист а в этом же контекст е я вляется написание такого приложения, которое будет минимально расходовать системные ресурсы, в частност и о перативную память и время процессора. Если разрабатывается большое приложение, тогда чем меньше оно потребляет системных ресурсов, тем медленнее оно работает. Поэтому программист большого приложения вынужден постоянно искать компромисс между потреблением ресурсов и производительностью приложения.
Некоторые пользователи могут заметить, что мощность компьютеров постоянно растет, поэтому беспокойство о ресурсах компьютера не несет в себе смысла. Тут нужно отметить, что вместе с мощностью компьютера растет сложность используемых программ, поэтому экономия ресурсов компьютера всегда будет актуальной.
Что такое потоки в операционной системе и процессоре
Мы выяснили, что процесс в операционной системе является неким объектом, которому выделяются системные ресурсы, но самостоятельно он не выполняет код программы. У одного процесса мо жет быть несколько потоков, которые будут выполняться одновременно и параллельно. Важно отметить, что несколько потоков одного процесса будут выполнять отдельные части кода одной программы.
Представим на секунду, сколько процессов может быть одновременно запущено на компьютере? Несколько десятков. А сколько потоков могут быть одновременно запущены на компьютере? Несколько сотен. Установленный процессор чисто физически не справился бы со всеми потоками одновременно. Поэтому в операционной системе существует специальный планировщик процессорных потоков. Суть его работы сводится к тому, чтобы выдавать приоритет каждому отдельному потоку и отправлять на выполнение тот, у которого максимальный приоритет.
Получается, что приори те тность потоков является условным свойством, которое может быть передано любому потоку, если пользователю или устройству необходимо его исполнение.
Что такое потоки в процессоре
один с 4 ядрами по 2 потока, то есть всего 8 потоков;
Заключение
Что такое процесс в ОС? Простыми словами, процессом в операционной системе является каждое отдельно запущенное приложение. Процессы в ОС не взаимосвязаны, поэтому могут работать по отдельности.
Что такое поток в программировании? Это возможность разрабатываемой программы работать параллельно в несколько «веток » ( потоков). Потоки в программировании взаимосвязаны. Потоки одной программы не могут работать отдельно друг от друга.
Потоки, процессы, задачи являются очень интересной и обширной темой. Сегодня мы лишь приоткрыли занавес по этой тематике, чтобы вы имели представлени е об этих терминах.
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
Процессы и потоки in-depth. Обзор различных потоковых моделей
Здравствуйте дорогие читатели. В данной статье мы рассмотрим различные потоковые модели, которые реализованы в современных ОС (preemptive, cooperative threads). Также кратко рассмотрим как потоки и средства синхронизации реализованы в Win32 API и Posix Threads. Хотя на Хабре больше популярны скриптовые языки, однако основы — должны знать все 😉
Потоки, процессы, контексты.
Системный вызов (syscall). Данное понятие, вы будете встречать достаточно часто в данной статье, однако несмотря на всю мощь звучания, его определение достаточно простое 🙂 Системный вызов — это процесс вызова функции ядра, из приложение пользователя. Режим ядра — код, который выполняется в нулевом кольце защиты процессора (ring0) с максимальными привилегиями. Режим пользователя — код, исполняемый в третьем кольце защиты процессора (ring3), обладает пониженными привилегиями. Если код в ring3 будет использовать одну из запрещенных инструкций (к примеру rdmsr/wrmsr, in/out, попытку чтения регистра cr3, cr4 и т.д.), сработает аппаратное исключение и пользовательский процесс, чей код исполнял процессор в большинстве случаях будет прерван. Системный вызов осуществляет переход из режима ядра в режим пользователя с помощью вызова инструкции syscall/sysenter, int2eh в Win2k, int80h в Linux и т.д.
И так, что же такое поток? Поток (thread) — это, сущность операционной системы, процесс выполнения на процессоре набора инструкций, точнее говоря программного кода. Общее назначение потоков — параллельное выполнение на процессоре двух или более различных задач. Как можно догадаться, потоки были первым шагом на пути к многозадачным ОС. Планировщик ОС, руководствуясь приоритетом потока, распределяет кванты времени между разными потоками и ставит потоки на выполнение.
На ряду с потоком, существует также такая сущность, как процесс. Процесс (process) — не что более иное, как некая абстракция, которая инкапсулирует в себе все ресурсы процесса (открытые файлы, файлы отображенные в память. ) и их дескрипторы, потоки и т.д. Каждый процесс имеет как минимум один поток. Также каждый процесс имеет свое собственное виртуальное адресное пространство и контекст выполнения, а потоки одного процесса разделяют адресное пространство процесса.
Классификация потоков
Классификация потоков по отображению в режим ядра
Модель N:M отображает некоторое число потоков пользовательских процессов N на M потоков режима ядра. Проще говоря имеем некую гибридную систему, когда часть потоков ставится на выполнение в планировщике ОС, а большая их часть в планировщике потоков процесса или библиотеки потоков. Как пример можно привести GNU Portable Threads. Данная модель достаточно трудно реализуема, но обладает большей производительностью, так как можно избежать значительного количества системных вызовов.
Модель N:1. Как вы наверное догадались — множество потоков пользовательского процесса отображаются на один поток ядра ОС. Например волокна.
Классификация потоков по многозадачной модели
Однако, кооперативная многозадачность со временем показала свою несостоятельность. Росли объемы данных хранимых на винчестерах, росла также скорость передачи данных в сетях. Стало понятно, что некоторые потоки должны иметь больший приоритет, как-то потоки обслуживания прерываний устройств, обработки синхронных IO операций и т.д. В это время каждый поток и процесс в системе обзавелся таким свойством, как приоритет. Подробнее о приоритетах потоков и процессов в Win32 API вы можете прочесть в книге Джефри Рихтера, мы на этом останавливатся не будем 😉 Таким образом поток с большим приоритетом, может вытеснить поток с меньшим. Такой прицип лег в основу вытесняющей многозадачности (preemptive multitasking). Сейчас все современные ОС используют данный подход, за исключением реализации волокон в пользовательском режиме.
Классификация потоков по уровню реализации
Win32 API Threads
Если вы все еще не устали, предлагаю небольшой обзор API для работы с потоками и средствами синхронизации в win32 API. Если вы уже знакомы с материалом, можете смело пропускать этот раздел 😉
Потоки в Win32 создаются с помощью функции CreateThread, куда передается указатель на функцию (назовем ее функцией потока), которая будет выполнятся в созданом потоке. Поток считается завершенным, когда выполнится функция потока. Если же вы хотите гарантировать, что поток завершен, то можно воспользоватся функцией TerminateThread, однако не злоупотребляйте ею! Данная функция «убивает» поток, и отнюдь не всегда делает это корректно. Функция ExitThread будет вызвана неявно, когда завершится функция потока, или же вы можете вызвать данную функцию самостоятельно. Главная ее задача — освободить стек потока и его хендл, т.е. структуры ядра, которые обслуживают данный поток.
Поток в Win32 может пребывать в состоянии сна (suspend). Можно «усыпить поток» с помощью вызова функции SuspendThread, и «разбудить» его с помощью вызова ResumeThread, также поток можно перевести в состояние сна при создании, установив значение параметра СreateSuspended функции CreateThread. Не стоит удивлятся, если вы не увидите подобной функциональности в кроссплатформенных библиотеках, типа boost::threads и QT. Все очень просто, pthreads просто не поддерживают подобную функциональность.
Средства синхронихации в Win32 есть двух типов: реализованные на уровне пользователя, и на уровне ядра. Первые — это критические секции (critical section), к второму набору относят мьютексы (mutex), события (event) и семафоры (semaphore).
Критические секции — легковесный механизм синхронизации, который работает на уровне пользовательского процесса и не использует тяжелых системных вызовов. Он основан на механизме взаимных блокировок или спин локов (spin lock). Поток, который желает обезопасить определенные данные от race conditions вызывает функцию EnterCliticalSection/TryEnterCriticalSection. Если критическая секция свободна — поток занимает ее, если же нет — поток блокируется (т.е. не выполняется и не отъедает процессорное время) до тех пор, пока секция не будет освобождена другим потоком с помощью вызова функции LeaveCriticalSection. Данные функции — атомарные, т.е. вы можете не переживать за целостность ваших данных 😉
Posix Threads или pthreads
Сложно представить, какая из *nix подобных операционных систем, не реализует этот стандарт. Стоит отметить, что pthreads также используется в различных операционных системах реального времени (RTOS), потому требование к этой библиотеке (вернее стандарту) — жестче. К примеру, поток pthread не может пребывать в состоянии сна. Также в pthread нет событий, но есть гораздо более мощный механизм — условных переменных (conditional variables), который с лихвой покрывает все необходимые нужды.
Поговорим об отличиях. К примеру, поток в pthreads может быть отменен (cancel), т.е. просто снят с выполнения посредством системного вызова pthread_cancel в момент ожидания освобождения какого-нибудь мьютекса или условной переменной, в момент выполнения вызова pthread_join (вызывающий поток блокируется до тех пор, пока не закончит свое выполнение поток, приминительно к которому была вызвана функция) и т.д. Для работы с мьютексами и семафорами существует отдельные вызовы, как-то pthread_mutex_lock/pthread_mutex_unlock и т.д.
Conditional variables (cv) обычно используется в паре с мьютексами в более сложных случаях. Если мьютекс просто блокирует поток, до тех пор, пока другой поток не освободит его, то cv создают условия, когда поток может заблокировать сам себя до тех пор, пока не произойдет какое-либо условия разблокировки. Например, механизм cv помогает эмулировать события в среде pthreads. Итак, системный вызов pthread_cond_wait ждет, пока поток не будет уведомлен о том, что случилось определенное событие. pthread_cond_signal уведомляет один поток из очереди, что cv сработала. pthread_cond_broadcast уведомляет все потоки, которые вызывали pthread_cond_wait, что сработала cv.
Прощальное слово
На сегодня пожалуй все, иначе информации станет слишком много. Для интересующихся, есть несколько полезных ссылок и книг внизу 😉 Также высказывайте свое мнение, интересны ли вам статьи по данной теме.
UPD: дополнил статью небольшой информацией о режиме ядра и режиме пользователя.
UPD2: исправил досадные промахи и ошибки. Спасибо комментаторам 😉
Что такое потоки в процессоре?
Просматривая характеристики современного процессора, среди таких важных его показателей, как количество ядер, тактовая частота, техпроцесс и объем кэша, также стоит отметить параметр с обозначением “количество потоков”. Далеко не все понимают что это такое и на что влияет при работе компьютера. В данной статье мы постараемся максимально кратко и понятно ответить на эти вопросы.
Поток в процессоре – он же логический процессор
Для начала вас стоит знать, что поток в современном процессоре может называться еще виртуальным ядром или логическим процессором. По сути все это синонимы.
До появления многопроцессорных систем (материнских плат, на которые можно было устанавливать 2 процессора и более), понятие многозадачности в компьютере было условным. Несмотря на то, что пользователь мог одновременно работать в нескольких приложениях (например слушать музыку и сидеть в интернете), для процессора обрабатывать данные двух программ одновременно было невозможно. Делалось это за счет быстрых и частых переключений процессора с одной задачи на другую так, что пользователь этого просто не замечал. Из-за этих самых переключений сильно страдала скорость работы системы в целом.
Чтобы решить данную проблему и повысить параллельную скорость работы нескольких приложений были придуманы многопроцессорные системы. В них один процессор обрабатывал одну группу задач, а второй – другую.
Материнская плата с двумя процессорами
Но вопрос теперь был в другом. Стоимость таких систем была нецелесообразно высокой из-за сложности построения.
Следующим этапом в развитии процессоров стали гиперпотоки или как их сейчас называют – потоки. Говоря простыми словами, поток в процессоре – это виртуальное ядро, отличающееся от полноценного независимого ядра тем, что у него отсутствует часть узлов, ответственных за организацию и обработку данных. Но регистры, отвечающие за хранение архитектурного состояния, а также кэши у каждого из потоков свои.
Благодаря этому, возрастает скорость обработки многопоточных приложений при меньших трудозатратах, так как себестоимость процессоров с несколькими потоками на порядок ниже многоядерных и многопроцессорных решений. Среди прочих плюсов стоит отметить меньшее энергопотребление и как следствие – меньшее тепловыделение.
В настоящее время процессоры делаются многоядерными и многопоточными. Например, тот же Ryzen 5 2600 имеет 6 ядер, каждое из которых работает в два потока. Итого 12 потоков. Конечно, его нельзя назвать 12 ядерным (хотя многие по ошибке так делают), но производительность его во многих оптимизированных под многопоточность программах и играх будет на порядок выше, чем у аналогичного с 6 ядрами, каждое из которых работает в один поток.
Создание же процессора с полноценными 12 ядрами будет на порядок дороже и сложнее.
Смысл многоядерно-многопоточной реализации – повышение скорости работы и снижение стоимости производства, а также энергопотребления современных процессоров.
Вывод
Потоки в современном процессоре это “недоядра”, позволяющие увеличить скорость работы приложений, оптимизированных на работу в несколько потоков данных, а таковыми являются практически все нынешние программы и игры.
Что такое потоки в процессоре и в чём различие с ядрами?
Доброго времени суток.
Вы в курсе, что центральные процессоры для компьютера с большим количеством ядер могут уступать в производительности тем, у которых их меньше? Если вы хотите взять мощный CPU, следует учитывать и число потоков в нем. Не знаете, что такое потоки в процессоре? В этой статье вы получите информацию, которая поможет вам в выборе ЦП.
Разберемся в терминологии
Чтобы ни у кого не возникало путаницы в голове, предлагаю разобраться с ключевыми терминами, играющими роль в нашей теме.
Ядро процессора — часть микросхемы, отвечающая за выполнение одного потока команд.
В современных процах, как правило, несколько ядер, каждое из которых имеет собственный кэш первого уровня и общий — второго и третьего. Такое решение позволяет данным быстрее перемещаться между ядрами, когда они работают над одним процессом.
Не путайте с ядром операционной системы, которое координирует доступ программ к ресурсам компьютера.
Поток выполнения — самая малая единица обработки, назначенная ядром ОС, которая разделяет код и контекст процесса. В одном процессе могут действовать сразу несколько потоков и совместно использовать ресурсы CPU.
Технология Hyper-threading
Вы наверняка слышали или догадались из вышесказанного, что чем больше в процессоре ядер и гигагерц, тем он быстрее обрабатывает задачи, которые вы ему даете. Это правда. Но не только ядра влияют на производительность, если речь идет о продуктах бренда Intel.
Компания изобрела технологию под названием «Hyper-threading» (полное — hyper-threading technology, HT либо HTT), которое переводится на русский язык как гиперточность. Она разработана для процев, основанных на микроархитектуре NetBurst.
HT отсутствует в устройствах линейки Core 2, в том числе «Duo» и «Quad». Схожая технология с таким же наименованием внедрена в продуктах Core i3, «i7» и нескольких «i5», а также в некоторые модели серий Itanium и Atom.
Суть «Hyper-threading» заключается в том, что при выполнении задач операционная система определяет одно физическое ядро CPU как два логических. Как вы понимаете, HTT позволяет увеличить скорость работы устройства. И ему можно задавать больше команд одновременно. Более того, если одному логическому ядру дана задача, но он с ней не справляется, а второе при этом бездействует, то последнее помогает первому.
Сколько потоков имеет CPU?
Самый быстрый способ вычислить, сколько потоков содержится в том или ином процессоре — умножить количество ядер надвое (это только если ваш проц поддерживает гипер трэйдинг).
Но если вы не знаете число ядер и хотите определить, сколько потоков имеется в вашем ЦП прямо сейчас, вызовите Диспетчер задач путем зажатия клавиш Ctrl+Alt+Del. Дальнейшие действия зависят от версии операционки, которая у вас установлена.
На случай, если у вас вдруг что-то не получилось с Диспетчером задач, есть еще один способ:
Но тут будут показаны только сами ядра.
В принципе это всё, что я хотел, спасибо за внимание.