-2

Сегодня я пытался понять, что такое многопоточность и гиперпоточность. Однако у меня есть несколько сомнений по этому поводу.

  1. Что происходит в многопоточности, когда два потока пытаются изменить одно и то же местоположение одновременно?

  2. Являются ли потоки полностью концепциями операционной системы, а ЦП понятия не имеет о них? Это видит их как процессы?

гиперпоточность позволяет операционной системе видеть в два раза больше логических ядер на физическое ядро.

  1. Означает ли это, что каждое физическое ядро выполняет два процесса одновременно? Или это означает, что два потока одновременно?

Так что в основном я путаюсь между процессами и потоками в случае гиперпоточности. Также Что происходит, когда зависимые потоки и процессы поступают в случае многопоточности и гиперпоточности?

1 ответ1

3
  1. Одновременный доступ: это чрезвычайно сложный вопрос. На очень низком уровне доступа к отдельным ячейкам памяти аппаратное обеспечение заботится об этом, возможно, блокируя один поток на несколько тактов. На более высоком уровне - с чем обычно имеет дело программист - обычно ожидается, что вы будете использовать блокировки, семафоры, очереди сообщений, транзакционную память или какой-либо другой механизм, чтобы не допустить этого; или использовать тщательно разработанные алгоритмы "без блокировки" вместе с атомарными примитивами. Понять это правильно сложно.
  2. Более менее. Потоки также могут рассматриваться как процессы, которые совместно используют свое виртуальное адресное пространство. По этой причине потоки иногда называют "облегченными процессами". Конечно, одинаково справедливо думать о процессах как о потоках, которые имеют разные адресные пространства (и другие ресурсы ядра).
  3. Гиперпоточность. Современные процессоры работают намного быстрее, чем память (даже кэш-память), поэтому большую часть времени они проводят в ожидании, а не на фактической обработке. Суперскалярные процессоры могут выполнять несколько инструкций одновременно, но большая часть кода имеет слишком много самостоятельности, чтобы реально воспользоваться этим. Гиперпоточность позволяет запланировать два потока для использования ресурсов одного и того же ядра, так что, надеюсь, ресурсы могут быть полностью использованы. Иногда это работает лучше, чем просто использование двух ядер, иногда нет.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .