Ich habe 3 Tage damit verbracht, einen sehr undurchsichtigen Fehler in einer von meinem Kollegen erstellten Bibliothek zu beheben. Dieser Fehler tritt sehr selten auf. Immerhin stellte ich fest, dass dieser Fehler auf einen Thread-übergreifenden Zugriff auf ein Objekt ohne Sperre zurückzuführen ist. Eigentlich ist dies kein erster Fehler dieser Art, es gab ähnliche Fehler zuvor. Er führt gerade seine Unit-Tests durch, und wenn etwas fehlschlägt, setzt er irgendwo ein Schloss auf. Und wenn nichts ausfällt, ist sein Code perfekt. Anscheinend hat er keine Ahnung, was die Sicherheit des Einfädelns angeht. Ich bin mir zu 100% sicher, dass es viele ähnliche Bugs gibt, die noch nicht aufgetaucht sind. Es sieht so aus, als ob PM das Threading nicht versteht.
Das Problem ist, dass er viel mehr Zeit in der Firma arbeitet als ich. Wie auch immer, ich kann nicht einfach sagen "dieser Typ ist in diesem Bereich inkompetent", weil dies immer einen "schlechten Teamplayer" anzeigt.
quelle
Antworten:
Überzeugen Sie den Premierminister, dass das Know-how des Teams zum Thema Threading verbessert werden sollte, um solche Fehler zu vermeiden, und sagen Sie ihm, dass Sie bereit sind, einen Workshop oder eine Präsentation darüber zu organisieren. Machen Sie es nicht zu einer persönlichen Sache zwischen Ihnen und Ihrem Kollegen.
quelle
Schreiben Sie einen Komponententest, der den Fehler aufzeigt, und bitten Sie ihn, ihn zu beheben.
quelle
quelle
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 zui
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.
quelle