Zweifel bezüglich Multithreading und Hyperthreading

404
Raman

Heute versuchte ich zu verstehen, was Multithreading und Hyperthreading sind. Ich habe jedoch einige Zweifel daran.

  1. Was passiert beim Multithreading, wenn zwei Threads versuchen, dieselbe Position gleichzeitig zu ändern?

  2. Sind Threads, Betriebssystemkonzepte und CPU, keine Ahnung? Sie sehen sie als Prozesse?

Hyperthreading ermöglicht einem Betriebssystem die doppelte Anzahl logischer Kerne pro physischem Kern.

  1. Bedeutet das, dass jeder physische Kern zwei Prozesse gleichzeitig ausführt? Oder es bedeutet zwei Threads gleichzeitig?

Grundsätzlich bin ich bei Hyperthreading zwischen Prozessen und Threads verwirrt. Was passiert auch, wenn abhängige Threads und Prozesse bei Multithreading und Hyperthreading eintreffen?

-2
1) Das kann nicht passieren. 2) Nein; Threads sind kein auf das Betriebssystem beschränktes Konzept. 3) Hyperthreading bedeutet, dass ein einzelner Kern 2 Threads verarbeiten kann. Dies unterscheidet sich von einer CPU, die aus offensichtlichen Gründen mehrere Kerne hat. Ramhound vor 8 Jahren 0

1 Antwort auf die Frage

3
Wim Lewis
  1. Gleichzeitiger Zugriff: Dies ist eine äußerst komplexe Frage. Auf einem sehr niedrigen Niveau sorgt die Hardware für den Zugriff auf einzelne Speicherstellen dafür, indem sie möglicherweise einen Thread für einige Taktzyklen blockiert. Auf einer höheren Ebene - womit sich ein Programmierer normalerweise befasst - werden normalerweise Sperren, Semaphore, Nachrichtenwarteschlangen, Transaktionsspeicher oder ein anderer Mechanismus verwendet, um dies zu verhindern. oder um sorgfältig entwickelte "lock-free" -Algorithmen zusammen mit atomaren Grundelementen zu verwenden. Dies richtig zu machen ist schwierig .
  2. Mehr oder weniger. Threads können auch als Prozesse betrachtet werden, die ihren virtuellen Adressraum gemeinsam nutzen. Threads werden aus diesem Grund manchmal als "Leichtbauprozesse" bezeichnet. Natürlich ist es genauso gültig, Prozesse als Threads mit unterschiedlichen Adressräumen (und anderen Kernel-Ressourcen) zu verstehen.
  3. Hyperthreading: Moderne CPUs sind so viel schneller als Speicher (sogar Cache-Speicher), dass sie die meiste Zeit mit Warten verbringen, anstatt sie tatsächlich zu verarbeiten. Superskalare Prozessoren können mehrere Anweisungen gleichzeitig ausführen, aber der größte Code ist zu unabhängig, um davon wirklich Gebrauch zu machen. Durch Hyperthreading können zwei Threads so geplant werden, dass sie die Ressourcen des gleichen Kerns verwenden, sodass die Ressourcen hoffentlich vollständig genutzt werden können. Manchmal klappt es besser als nur zwei Kerne, manchmal nicht.
Zusätzlich: Die Programmierung von Multiprocessing- / Threading-Anwendungen erfordert die gleiche Aufmerksamkeit wie die Programmierung von RTOS-Anwendungen (Real Time OS). Es steckt keine CPU-Magie darin, nur Verarbeitung und Wissen. Hannu vor 8 Jahren 0