Wenn ich verstehe, was Sie fragen, ist es möglich, aber es ist eine sehr, sehr schlechte Sache.
Das kanonische Beispiel für das, was Sie beschreiben, wäre die Pflege eines Zählers, der um mehrere Threads erhöht wird. Dies erfordert fast nichts an Rechenleistung, erfordert jedoch eine sorgfältige Koordination zwischen den Threads. Solange jeweils nur ein Thread ein Inkrement ausführt (bei dem es sich tatsächlich um einen Lesevorgang gefolgt von einer Addition gefolgt von einem Schreibvorgang handelt), ist sein Wert immer korrekt. Dies liegt daran, dass ein Thread immer den richtigen "vorherigen" Wert liest, einen hinzufügt und den richtigen "nächsten" Wert schreibt. Bringen Sie zwei Threads gleichzeitig in die Aktion, und beide lesen denselben "vorherigen" Wert, erhalten dasselbe Ergebnis aus dem Inkrement und schreiben denselben "nächsten" Wert. Der Zähler wurde effektiv nur einmal inkrementiert, obwohl zwei Threads glauben, dass sie es jeweils getan haben.
Diese Abhängigkeit zwischen Timing und Korrektheit wird in der Informatik als Race Condition bezeichnet .
Wettlaufsituationen werden häufig vermieden, indem Synchronisationsmechanismen verwendet werden, um sicherzustellen, dass Threads, die mit einem Teil der gemeinsam genutzten Daten arbeiten möchten, für den Zugriff in der Warteschlange stehen müssen. Der oben beschriebene Zähler könnte hierfür eine Lese- / Schreibsperre verwenden .
Ohne Zugriff auf das interne Design von Dragon Age: Inquisition kann jeder nur darüber spekulieren, warum es sich so verhält wie es ist. Aber ich werde versuchen, basierend auf einigen Dingen, die ich in meiner eigenen Erfahrung gesehen habe:
Möglicherweise basiert das Programm auf vier Threads, die optimiert wurden, sodass alles funktioniert, wenn die Threads größtenteils ohne Unterbrechung auf ihren eigenen physischen Kernen ausgeführt werden. Die "Optimierung" könnte in Form einer Neuanordnung des Codes oder der Einfügung von Ruhezuständen an strategischen Stellen erfolgen, um rassenzustandsbedingte Fehler, die während der Entwicklung aufgetreten sind, zu mindern. Auch dies ist alles eine Vermutung, aber ich habe gesehen, dass sich die Rennbedingungen mehrmals auf diese Weise "gelöst" haben, als ich zählen möchte.
Das Ausführen eines Programms auf diese Weise in einer Umgebung, die weniger leistungsfähig ist als die Umgebung, für die es optimiert wurde, führt zu Zeitänderungen, die darauf zurückzuführen sind, dass der Code nicht so schnell ausgeführt wird oder eher Kontextwechsel. Kontextwechsel erfolgen auf physische Weise (dh die physischen Kerne der CPU wechseln zwischen der Arbeit, die ihre logischen Kerne halten) und auf logische Weise (dh, das Betriebssystem in der CPU weist den Kernen Arbeit zu) wäre der "erwartete" Ausführungszeitpunkt. Das kann schlechtes Benehmen hervorrufen.
Wenn Dragon Age: Inquisition nicht den einfachen Schritt unternimmt, um sicherzustellen, dass genügend physische Kerne verfügbar sind, bevor Sie fortfahren, ist dies die Schuld von EA. Wahrscheinlich geben sie ein kleines Vermögen für Supportanrufe und E-Mails von Leuten aus, die versuchten, das Spiel mit zu wenig Hardware zu betreiben.