Сомнения относительно многопоточности и гиперпоточности

318
Raman

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

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

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

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

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

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

-2
1) Этого не может быть; 2) нет; Потоки - это не концепция, ограниченная только ОС; 3) Гиперпоточность означает, что одно ядро ​​может обрабатывать 2 потока, это отличается от процессора, который имеет несколько ядер по очевидным причинам. Ramhound 8 лет назад 0

1 ответ на вопрос

3
Wim Lewis
  1. Simultaneous access: This is an extremely complex question. At a very low level, of accessing individual memory locations, the hardware takes care of it by possibly blocking one thread for a few clock cycles. At a higher level— what a programmer usually deals with— you are normally expected to use locks, semaphores, message queues, transactional memory, or some other mechanism to keep it from happening; or to use carefully-designed "lock-free" algorithms along with atomic primitives. Getting this right is difficult.
  2. More or less. Threads can also be thought of as processes which share their virtual address space. Threads are sometimes called "lightweight processes" for this reason. Of course, it is equally valid to think of processes as threads which have different address spaces (and other kernel resources).
  3. Hyperthreading: Modern CPUs are so much faster than memory (even cache memory) that they spend most of their time waiting rather than actually processing. Superscalar processors can execute multiple instructions at a time but most code has too much self-dependency to really take advantage of this. Hyperthreading allows two threads to be scheduled to use the same core's resources so that, hopefully, the resources can be fully utilized. Sometimes it works out better than just using two cores, sometimes not.
Дополнительно: программирование многопроцессорных / многопоточных приложений требует такого же внимания, как и программирование приложений для ОС реального времени. В этом нет волшебства процессора, только мастерство и знания. Hannu 8 лет назад 0

Похожие вопросы