Подтвердить что ты не робот

Темы и процессы Vs MultiThreading & Multi-Core/MultiProcessor: как они отображаются?

Я был очень смущен, но следующий поток очистил мои сомнения:

Многопроцессорная, многопоточная, гипертекстовая, многоядерная

Но он обращается к запросам с аппаратной точки зрения. Я хочу знать, как эти аппаратные функции отображаются на программное обеспечение?

Очевидно, что нет никакой разницы между MultiProcessor (= Mutlicpu) и MultiCore, кроме того, что в многоядерном режиме все процессоры находятся на одном чипе (die), где, как и в Multiprocessor, все процессоры находятся на своих собственных чипах и соединены вместе.

Итак, системы mutlicore/multiprocessor способны выполнять несколько процессов (firefox, mediaplayer, googletalk) в "sametime" (в отличие от контекста, который переключает эти процессы на одну процессорную систему). Правильно?

Если это правильно. Пока что я понятен. Но возникает путаница, когда возникает многопоточность.

  • MultiThreading "предназначен для параллельной обработки. не так ли?

  • Каковы элементы, которые участвуют в многопоточности внутри процессора? схема? Для использования возможности параллельной обработки двух независимых задач, какими должны быть требования к процессору?

  • Когда люди говорят о переключении потоков в контексте. Я действительно не понимаю. потому что если его контекстное переключение потоков, то это не параллельная обработка. потоки должны выполняться "скрининг одновременно". не так ли?

    Мое понятие многопоточности заключается в следующем: Рассмотрим систему с одним процессором. когда процесс переключается по контексту на firefox. (предположим) каждая вкладка firefox - это поток, и все потоки выполняются строго в одно и то же время. Не похоже, чтобы какой-то поток выполнялся на некоторое время, а затем снова выполнялся другой поток, пока не наступило время переключения контекста.

  • Что произойдет, если я запустил многопоточное программное обеспечение на процессоре, который не может обрабатывать потоки? Я имею в виду, как процессор обрабатывает такое программное обеспечение?

  • Если все до сих пор хорошо, теперь вопрос: КАК МНОГО НИТЬ? Наверное, это должно быть ограничено аппаратными средствами. Если аппаратное обеспечение поддерживает только 2 потока, и я запускаю 10 потоков в моем процессе. Как cpu справится с этим? За и против? С точки зрения разработки программного обеспечения, при разработке программного обеспечения, которое будет использоваться пользователями в самых разных системах, Тогда как я могу решить, нужно ли мне многопоточность? если да, сколько потоков?

4b9b3361

Ответ 1

Сначала попробуйте понять концепцию "процесс" и "поток". Поток является базовым блоком для исполнения: поток назначается операционной системой и выполняется процессором. Процесс представляет собой своего рода контейнер, который содержит несколько потоков.

  • Да, для параллельной обработки используется многопроцессорная или многопоточная. Точнее, использовать уровень уровня parallelism.

  • Хорошо, многопоточность может означать аппаратную многопоточность (одним из примеров является HyperThreading). Но, я полагаю, вы просто говорите многопоточность в программном обеспечении. В этом смысле CPU должен поддерживать переключение контекста.

  • Контекстное переключение необходимо для реализации многозадачности даже в физически одиночном ядре по временному разделению.

  • Скажем, что есть два физических ядра и четыре очень занятых потока. В этом случае два потока просто ждут, пока они не получат возможность использовать процессор. Ознакомьтесь с некоторыми статьями, связанными с предварительным планированием ОС.

  • Число потоков, которые могут физически выполняться в параллельном режиме, просто идентично # логическим процессорам. Вы задаете общую задачу планирования потоков в литературе ОС, например, round-robin.

Я сильно предлагает вам сначала изучить основы операционной системы. Затем переходите к многопоточным проблемам. Похоже, что до сих пор неясно, какие ключевые понятия, такие как переключение контекста и планирование. Это займет пару месяцев, но если вы действительно хотите быть экспертом в области компьютерного программного обеспечения, тогда вы должны знать такие очень простые понятия. Пожалуйста, возьмите любые книги по ОС и слайды для лекций.

Ответ 2

Нити, работающие на одном и том же ядре, не являются технически параллельными. Кажется, что они выполняются параллельно, так как CPU переключается между ними очень быстро (для нас, людей). Этот переключатель называется так называемым контекстным переключателем. Теперь потоки, выполняемые на разных ядрах, выполняются параллельно. Большинство современных процессоров имеют несколько ядер, однако большинство современных ОС (windows, linux и friends) обычно выполняют гораздо большее количество потоков, что по-прежнему вызывает контекстные коммутаторы. Даже если ни одна пользовательская программа не выполняется, все же сама ОС выполняет контекстные переключатели для работы в режиме maintanance.
Это должно ответить 1-3.

Около 4: в принципе, каждый процессор может работать с потоками. это гораздо более характерно для операционной системы. Тема в основном: память (необязательно), стек и регистры, как только они заменяются, вы находитесь в другом потоке.

5: количество потоков довольно велико и ограничено ОС. Обычно он выше, чем обычный программист может успешно справиться:) Количество потоков продиктовано вашей программой:

связано ли это с IO?

  • может ли задача быть разделена на несколько меньших задач?
  • Насколько мала задача? задача может быть слишком маленькой, чтобы все было нормально создавать нити.
  • : если требуется обширная синхронизация, штраф может быть слишком тяжелым, и вы должны уменьшить количество потоков.

Ответ 3

Несколько потоков - это отдельные "цепочки" команд в рамках одного процесса. С точки зрения процессора потоки являются более или менее похожими на процессы. Каждый поток имеет свой собственный набор регистров и собственный стек.

Причина, по которой у вас может быть больше потоков, чем у процессоров, заключается в том, что большинство потоков не нуждаются в процессоре все время. Тема может ждать ввода пользователя, загрузки чего-либо из Интернета или записи на диск. Хотя он и делает это, ему не нужен процессор, поэтому процессор может выполнять другие потоки.

В вашем примере на каждой вкладке Firefox возможно даже несколько потоков. Или они могут делиться некоторыми потоками. Вам нужен один для загрузки, один для рендеринга, один для цикла сообщений (пользовательский ввод) и, возможно, один для запуска Javascript. Вы не можете легко их комбинировать, потому что во время загрузки вам все равно нужно реагировать на ввод пользователя. Тем не менее, загружаемый поток спящий большую часть времени, и даже когда он загружается, ему нужен процессор только время от времени, а поток цикла сообщений только просыпается, когда вы нажимаете кнопку.

Если вы перейдете к диспетчеру задач, вы увидите, что, несмотря на все эти потоки, ваше использование процессора все еще довольно низкое.

Конечно, если все ваши потоки выполняют ряд задач с хрустом, тогда вы не должны создавать слишком много из них, так как вы не получаете выгоды от производительности (хотя могут быть и преимущества архитектуры!).

Однако, если они в основном связаны с вводом-выводом, создайте столько потоков, сколько требует ваша архитектура. Трудно дать совет, не зная о вашей конкретной задаче.

Ответ 4

  • Вообще говоря, да, но "параллельно" может означать разные вещи.

  • Это зависит от того, какие задачи вы хотите выполнять параллельно.

  • Не обязательно. Некоторые (действительно, большинство) потоков тратят много времени, ничего не делая. Можете также отключиться от них до потока, который хочет что-то сделать.

  • ОС управляет переключением потоков. Он будет делегировать разные ядра, если захочет. Если есть только одно ядро, он будет делить время между различными потоками и процессами.

  • Количество потоков ограничено программным и аппаратным обеспечением. Нити потребляют процессор и память в разной степени в зависимости от того, что они делают. Программное обеспечение для управления потоками также может налагать свои собственные ограничения.

Ответ 5

Главное, что нужно запомнить, это разделение между логическим/виртуальным parallelism и реальным/аппаратным parallelism. С вашей средней ОС выполняется системный вызов для создания нового потока. Что на самом деле происходит (будь то сопоставлено с другим ядром, другим аппаратным потоком в одном ядре или помещено в пул программных потоков) зависит от ОС.

  • Параллельная обработка использует все методы не только многопоточности.
  • Вообще говоря, если вы хотите иметь настоящую параллельную обработку, вам необходимо выполнить ее в аппаратном обеспечении. Возьмем пример Niagara, он имеет до 8 ядер, каждый из которых способен выполнять 4 потока в оборудовании.
  • Контекстное переключение требуется, когда есть больше потоков, чем может выполняться параллельно в аппаратном обеспечении. Даже тогда, когда они выполняются последовательно (переключение между одним потоком на следующий), они считаются параллельными, потому что нет гарантии по порядку переключения. Таким образом, это может быть T0, T1, T2, T1, T3, T0, T2 и так далее. Для всех целей и задач потоки параллельны.
  • Сокращение времени.
  • Это будет до ОС.

Ответ 6

Многопоточность - это выполнение более чем одного потока за раз. Это может произойти как на одноядерных процессорах, так и на многоядерных процессорных системах. Для однопроцессорных систем это приводит к переключению контекста. Посмотрите! Контекстное переключение в этой вычислительной среде относится к временному сокращению операционной системы. Поэтому не путайте. Операционная система контролирует выполнение других программ. Он позволяет одновременно выполнять одну программу в CPU. Но частота, с которой потоки переключаются и выходят из ЦП, определяет прозрачность parallelism, выставленную системой.

Для многоядерной среды многопоточность возникает, когда каждое ядро ​​выполняет поток. Однако в многоядерном режиме переключение контекста может происходить в отдельных ядрах.

Ответ 7

Я думаю, что ответы до сих пор в значительной степени соответствуют сути и дают вам хороший базовый контекст. По сути, скажем, у вас четырехъядерный процессор, но каждый ядро ​​способен выполнять 2 одновременных потока.

Обратите внимание, что есть только небольшое (или нет) увеличение скорости, если вы используете 2 одновременных потока на 1 ядре против 1-го потока, а затем 2-го потока по вертикали. Однако каждое физическое ядро ​​добавляет скорость в общий рабочий процесс.

Теперь, скажем, у вас есть процесс, работающий на вашей ОС, который имеет несколько потоков (т.е. нужно запускать несколько вещей в "параллельном" ) и имеет некоторый стек задач в очереди (или какой-либо другой системе с правилами приоритета), Затем программное обеспечение отправляет задачи в очередь, и ваш процессор пытается выполнить их как можно быстрее. Теперь у вас есть 2 случая:

  • Если программное обеспечение поддерживает многопроцессорность, тогда задачи будут отправляться на любой доступный процессор (который ничего не делает или просто закончил выполнение другого задания и отправки задания из вашего программного обеспечения в очереди в очереди).
  • Если ваше программное обеспечение не поддерживает многопроцессорную обработку, все ваши задания будут выполняться аналогичным образом, но только одним из ваших ядер.

Я предлагаю прочитать страницу Википедии в теме. Очень первая фотография там уже дает вам хорошее представление.:)