Multithreading- und Multicore-Unterschiede
Ich habe ein paar kleine Fragen.
Erstens gibt es einen Unterschied zwischen multithreading und multicore? Sie sind zwei völlig verschiedene Dinge oder ist das multithreading mit mehr als einem Kern, wenn es benötigt?
Zweitens die Meisten Kerne, zwei threads, aber beim profiling meine app bemerkte ich viele verschiedene threads, angefangen von thread 128 thread-3460. Was bestimmt, wie viele threads Ihr computer verfügt?
Dank
InformationsquelleAutor der Frage Constan7ine | 2012-08-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja.
Multithreading und Multicore sind verschiedene Teile der Terminologie, die für verschiedene Bereiche der informatik.
Multicore bezieht sich auf einem computer oder Prozessor, hat mehr als eine logische CPU-Kern, und das kann körperlich ausführen mehrere Anweisungen auf der gleichen Zeit. Ein computer ist "core-Anzahl" ist die Gesamtzahl der Kerne der Rechner hat: Rechner kann über mehrere Prozessoren verfügen, von denen jede mehrere Kerne; die core-Anzahl ist die Gesamtzahl der Kerne über alle Prozessoren.
Multithreading bezieht sich auf ein Programm, dass können die Vorteile einer multicore-computer läuft auf mehr als einem Kern, der in der gleichen Zeit. Im Allgemeinen doppelt so viele Kerne gleich doppelt so viel Rechenleistung (für Programme, die Unterstützung für multithreading), obwohl einige Probleme können nur durch andere Faktoren als die CPU-Nutzung; diese Probleme werden sich nicht von der Erfahrung gewinnt, die sind so dramatisch, von multithreading.
Es ist wichtig zu beachten, dass die Leistung ist nicht der einzige Grund, warum Programme mit vielen threads. Dazu später mehr.
Sie sind Verwandte, aber nicht zu trennen.
Programme, die Unterstützung für multithreading verwenden können, mehr als einen Kern, wenn mehr als eine verfügbar ist.
Teilt das Betriebssystem threads zu zahlen, so kann es behalten.
Meisten Programme, die du jemals ausführen wirst nicht brauchen, 3400 threads gleichzeitig ausgeführt werden. Auch, einem Laufenden thread wird Sie verbrauchen alle des Kernes. Der einzige Grund, warum deine CPU nicht zu 100% die ganze Zeit ist, dass das Betriebssystem weiß, wie die Aussetzung der Prozessor, der im Grunde macht es alles einzustellen und zu warten, bis etwas passiert (wie z.B. ein E /a-Ereignis oder eine Uhr, tick). Nur ein thread kann auf einem Kern auf einmal. Verschiedenen threads laufen, ist eigentlich nur threads springen auf die CPU und läuft für kurze Zeit, dann schaltet sich mit anderen threads, die auch ausgeführt werden müssen.
Die Gesamtzahl der threads in allen Prozessen. Auch die meisten Betriebssysteme Verhängung einer hard-limit-maximale Anzahl der vorhandenen threads, dass kann nicht übertroffen werden.
Ein Prozess ist ein Programm (Sie kennen das wahrscheinlich). Multithreading ist der Prozess der mit mehr als einem thread pro Prozess (viele Prozesse nicht mehr als einen thread, weil Sie nicht müssen). Windows nicht haben eine harte Grenze für die Anzahl der threads, die Sie erstellen können (zumindest nicht seit XP. Nicht zu etwas zu sagen, w98 und Vorherige), aber natürlich ist die Anzahl der threads, die man machen kann, ist begrenzt, wie viel Speicher Sie haben.
Manchmal ist es schön, in der Lage sein, Multitasking, wenn auch nicht gleichzeitig.
Manchmal Programme tun müssen, um bestimmte Dinge zu bestimmten Zeiten. Eine Häufig zitierte Beispiel ist ein Programm mit einem sichtbaren Fenster. Das Programm könnte intensiver hintergrund der Anzahl Knirschen, aber es würde profitieren, wenn es könnte noch reagieren auf Benutzerereignisse wie das klicken von Schaltflächen und ändern der Größe. Dies kann erreicht werden mit asynchronen Verarbeitung, benötigt Ihr einen thread, um wiederholt zu prüfen, für GUI-Arbeit zu tun, in den Intervallen, die pause, was es tut, und behandeln Sie das GUI für eine Weile. Viele Dinge, die es so machen.
Einen anderen, möglicherweise besseren Weg, es zu handhaben ist mit einem Faden. Ihr Programm haben Sie nicht zu befürchten, hin-und herschalten zwischen der Anzahl Knirschen und GUI-management, das Betriebssystem zu verwalten, für Sie. Selbst wenn Sie nur ein Kern vorhanden ist, können Sie noch mehrere threads, und Ihr Betriebssystem wird sein bestes tun, um sicherzustellen, dass alle von den Laufenden threads in alle Laufenden Prozesse zu bekommen und Ihren Gerechten Anteil der CPU-Zeit.
InformationsquelleAutor der Antwort Wug
Die Anzahl der Kerne und Anzahl der threads entkoppelt sind. Sie können viele threads laufen auf einem einzelnen Kern, und Sie können Situationen, in denen nur ein thread ausgeführt wird, trotz der Anwesenheit von mehr Kernen (obwohl ich kann nicht denken Sie an einen wirklichen Leben Szenario, in dem dies geschehen würde). Lassen Sie uns sagen, multicore ist eine hardware-Eigenschaft, in der Erwägung, dass die Anzahl der threads ist etwas in die Domäne des Betriebssystems und der Laufenden Prozesse auf.
Natürlich, mit einem single-core kann man nicht mehr als ein thread ausgeführt gleichzeitig. Das Betriebssystem muss ständig hin-und herwechseln zwischen den threads.
InformationsquelleAutor der Antwort juanchopanza
Threading auf einem single-core-bedeutet in der Regel, die Sie erstellen können x Anzahl der threads an, und Sie wird jedem gegeben werden, die eingestellte Zeit zu laufen (thread-quantum). Wenn die threads vertauscht werden, dies bezeichnet man als Kontextwechsel, all dies dauert einige Zeit, so muss man einige benchmarking finden Sie die ideale Anzahl der threads pro core.
Wenn der Großteil der Arbeit ist cpu-bound ist, gibt es wenig Punkt laichen Hunderte von threads, da ist es unwahrscheinlich, dass die performance zu verbessern (in der Tat machen es noch schlimmer vielleicht, daran erinnern, Kontext-switching ist nicht "umsonst"). Allerdings tun dies für I/O-gebundene Arbeit kann es helfen, denn wenn das system ausgelastet ist, der diese Arbeit macht, in einem anderen thread gegeben werden kann cpu-Zeit.
Physische zusätzliche Kerne bedeutet zwei Dinge wirklich laufen parallel auf der hardware-Ebene.
InformationsquelleAutor der Antwort Science_Fiction
Hier, ich glaube, du verwechselst den überladenen Begriff "thread". Wie richtig hingewiesen hat, andere Antworten, ein thread in der Regel bezieht sich auf eine "software" - Konzept. Aber manchmal ist es auch als ein "hardware" - Konzept. Wenn ein "Kern" hat zwei "threads" (wie in vielen neuen Intel-chips), es bedeutet, dass der Kern kann zwei threads parallel, als gäbe es zwei cores. Dies ist jedoch in der Regel sogenannte hyperthreading. Siehe:
http://en.wikipedia.org/wiki/Hyper-threading
Also, wenn Sie N threads (ich meine software-threads, die aus innerhalb der Anwendung, oder einfach durch ausführen von verschiedenen Anwendungen zur gleichen Zeit) und M-Prozessoren (Kerne oder hardware-threads oben erklärt), passiert Folgendes:
Prozessor. Dann werden die Anwendungs-threads laufen wirklich parallel.
InformationsquelleAutor der Antwort Mahdi