Ich denke, Ihr Unternehmen sollte kein Multithreading verwenden.
Nachdem ich ein massives Multithread-Projekt durchgeführt hatte, stellte ich fest, dass zwei Techniken entscheidend dafür waren, dass Dinge funktionieren. Zuerst musste der Code richtig geschrieben werden. Jedes Feld musste manuell überprüft werden, um sicherzustellen, dass es ordnungsgemäß deklariert und synchronisiert wurde, wo immer darauf verwiesen wurde. (Warnung: Ich vereinfache die Dinge hier ein wenig, um meine Antwort kurz zu halten - oder zumindest kürzer.) Zweitens musste der Code getestet werden, indem er auf Einzel- und Mehrkerncomputern vollständig ausgeführt wurde - viele Minuten mit 100% von jedem Kern. (Und wenn es nur 2% jedes Kerns verwendet, wie es oft bei mir der Fall war, ist das auch ein Fehler.)
Möglicherweise können Sie dies verwalten, Ihre Organisation jedoch nicht. Selbst wenn sie das Problem verstanden haben, haben sie nicht das Fachwissen.
Die meisten Sprachen bieten Möglichkeiten, dies zu vermeiden. Wenn Sie einen Socket-Reader haben, der normalerweise einen eigenen Thread hat, lassen Sie ihn die Informationen so schnell und einfach wie möglich an den Haupt-Thread senden. Besser noch, suchen Sie nach Systemklassen / Funktionen, die den Thread-Teil des Lesens für Sie erledigen. Verwenden Sie eine Warteschlange, die "Ereignisse" nacheinander ausführt, wie es die meisten GUI-APIs tun. (Verwenden Sie im Übrigen die Ereigniswarteschlange der GUI-API selbst.) Wenn Sie eine parallele Verarbeitung benötigen, finden Sie möglicherweise eine Art "Arbeitsthread", mit dem Sie Daten / Felder in einem einzigen Thread behalten und alle Übertragungen für Sie abwickeln können.
Betonen Sie alle Gefahren von Multithreading. (Gruselgeschichten: Mein Lieblingsfehler umfasste ein paar Zeilen wie:, int i = 5; i = i * i;
was zu i
einem Wert von 35 führte. Eine, die ich oft gesehen habe, war: if (thing != null) thing.reset();
eine Nullzeiger-Ausnahme auslösen.) Ich denke, Ihre einzige Hoffnung ist, dass sie verstehen, dass sie sind Treten Sie ein in eine völlig neue, fremde Welt, und vielleicht sollten sie einen großen Schritt zurücktreten.
Ich bin mir nicht sicher, wie Multithreading behandelt werden soll. Wenn der Auftrag an eine Person vergeben werden kann und alles, was sie tun, weggeworfen wird, wenn sie versagt, ist das in Ordnung. Aber ein Team wird nur so stark sein wie sein schwächstes Mitglied, und selbst ein guter Programmierer wird Probleme mit dem vollständigen Multithreading haben. Ich hoffe, die Menschen in der Sprache werden einen Weg finden, es sicher zu machen. Ich habe da draußen eine hilfreiche Software gesehen. Ich halte es jedoch für das Beste, Multithreading zu vermeiden, es sei denn, die Ausführungszeit ist kritisch und ein guter Programmierer oder ein bewährtes Team ist verfügbar.