Nun, es hängt wirklich davon ab, was Sie entwickeln. Je nachdem, was Sie entwickeln, kann die Antwort von "unbedeutend" bis "absolut kritisch" reichen, und wir erwarten von jedem im Team, dass er die parallelen Implementierungen gut versteht und nutzt.
In den meisten Fällen ist ein solides Verständnis und die Verwendung von Sperren, Threads sowie Tasks und Taskpools ein guter Anfang, wenn Parallelität erforderlich ist. (variiert je nach Sprache / Lib)
Hinzu kommen die Unterschiede in den Designs, die Sie vornehmen müssen - für nicht-triviale Multiprozesse muss man oft mehrere neue Programmiermodelle oder Parallelisierungsstrategien erlernen. In diesem Fall kann ein Team ein Jahr (oder länger) benötigen, um zu lernen, genügend Zeit zu verlieren, um ein solides Verständnis zu erlangen und vorhandene Programme zu aktualisieren. Sobald Sie diesen Punkt erreicht haben, werden Sie (hoffentlich!) Probleme / Implementierungen nicht mehr so wahrnehmen oder angehen wie heute (vorausgesetzt, Sie haben diesen Übergang noch nicht vorgenommen).
Ein weiteres Hindernis besteht darin, dass Sie ein Programm effektiv für eine bestimmte Ausführung optimieren. Wenn Sie nicht viel Zeit haben, um Programme zu optimieren, werden Sie nicht so viel davon profitieren, wie Sie sollten. Eine hohe (oder offensichtliche) Parallelisierung kann die wahrgenommene Geschwindigkeit Ihres Programms mit relativ geringem Aufwand verbessern, und so weit werden heute viele Teams gehen: "Wir haben die wirklich offensichtlichen Teile der App parallelisiert" - das ist in einigen Fällen in Ordnung. Wird der Vorteil, die niedrig hängenden Früchte zu nehmen und eine einfache Parallisierung zu verwenden, in einem angemessenen Verhältnis zur Anzahl der Kerne stehen? oft, wenn es zwei bis vier logische Kerne gibt, aber nicht so oft darüber hinaus. In vielen Fällen ist dies angesichts des Zeitaufwands eine akzeptable Rendite. Dieses parallele Modell ist für viele die Einführung in die Implementierung von Parallelität.
Was Sie mit diesen trivialen parallelen Modellen lernen, ist nicht in allen komplexen parallelen Szenarien ideal. Das effektive Anwenden komplexer paralleler Designs erfordert ein völlig anderes Verständnis und Vorgehen. Diese einfachen Modelle sind häufig voneinander getrennt oder stehen in trivialer Wechselwirkung mit anderen Systemkomponenten. Außerdem lassen sich viele Implementierungen dieser einfachen Modelle nicht gut auf effektiv komplexe parallele Systeme skalieren. Die Ausführung eines schlechten komplexen parallelen Designs kann ebenso lange dauern wie die Ausführung des einfachen Modells. ill: Es wird doppelt so schnell ausgeführt wie das Single-Thread-Modell, wobei während der Ausführung 8 logische Kerne verwendet werden. Die häufigsten Beispiele sind die Verwendung / Erzeugung von zu vielen Threads und ein hohes Maß an Synchronisationsstörungen. Im Allgemeinen wird dies als parallele Verlangsamung bezeichnet. Es ist ziemlich leicht zu begegnen, wenn Sie alle parallelen Probleme als einfache Probleme betrachten.
Nehmen wir also an, Sie sollten in Ihren Programmen wirklich effizientes Multithreading einsetzen (die Minderheit im heutigen Klima): Sie müssen das einfache Modell effektiv einsetzen, um das komplexe Modell zu erlernen, und dann neu lernen, wie Sie den Programmfluss und die Interaktion angehen. Das komplexe Modell ist der Ort, an dem sich Ihr Programm letztendlich befinden sollte, da sich dort heute Hardware befindet und die wichtigsten Verbesserungen vorgenommen werden.
Die Ausführung einfacher Modelle kann wie eine Gabel gedacht werden, und die komplexen Modelle funktionieren wie ein komplexes Ökosystem. Ich denke, das Verständnis für einfache Modelle, einschließlich allgemeiner Sperr- und Threading-Funktionen, sollte oder wird in Kürze von fortgeschrittenen Entwicklern erwartet werden, wenn die Domäne (in der Sie entwickeln) sie verwendet. Das Verständnis komplexer Modelle ist heute (in den meisten Bereichen) noch etwas ungewöhnlich, aber ich denke, die Nachfrage wird recht schnell zunehmen. Als Entwickler sollten viel mehr unserer Programme diese Modelle unterstützen, und die meisten Anwendungen sind weit hinter dem Verständnis und der Implementierung dieser Konzepte zurückgeblieben. Da die Anzahl der logischen Prozessoren einer der wichtigsten Bereiche für die Verbesserung der Hardware ist, wird die Nachfrage nach Personen, die komplexe Systeme verstehen und implementieren können, mit Sicherheit zunehmen.
Schließlich gibt es eine Menge Leute, die denken, die Lösung sei nur "Parallelisierung hinzufügen". Oft ist es besser, die bestehende Implementierung zu beschleunigen. es ist in vielen Fällen viel einfacher und unkomplizierter. Viele Programme in freier Wildbahn wurden nie optimiert. Einige hatten nur den Eindruck, dass die nicht optimierte Version eines Tages bald von der Hardware verdrängt werden würde. Die Verbesserung des Designs oder der Anzahl vorhandener Programme ist auch eine wichtige Fähigkeit, wenn die Leistung wichtig ist - mehr Kerne auf Probleme zu werfen, ist nicht unbedingt die beste oder einfachste Lösung.
Bei der Ausrichtung auf moderne PCs müssen die meisten von uns, die gute parallele Systeme implementieren müssen, nicht über Multithreading, Sperren, parallele Bibliotheken, das Lesen eines Buches und viel Erfahrung beim Schreiben und Testen von Programmen hinausgehen (im Grunde bedeutet dies eine erhebliche Umstrukturierung Ihrer Arbeitsweise) Annäherung an das Schreiben von Programmen).