Gibt es Zombies? In .NET?

Ich hatte eine Diskussion mit einem Mitspieler zu sperren .NET. Er ist ein wirklich kluger Kerl mit einem umfangreichen hintergrund in beiden lower-level und High-level-Programmierung, aber seine Erfahrungen mit niedrigeren level-Programmierung weit über mir. Wie auch immer, Er argumentiert, dass .NET sperren sollten vermieden werden, auf kritische Systeme, erwartet, dass unter starker Auslastung, wenn überhaupt möglich, um zu vermeiden, dass die-zugegebenermaßen geringe-Möglichkeit einer "zombie-thread" Absturz eines Systems. Ich routinemäßig verwenden, sperren und wusste ich nicht, was ein "zombie-thread" war, also fragte ich. Ich bekam den Eindruck von seiner Erklärung ist, dass ein zombie-thread ist ein thread, der beendet wurde, aber irgendwie immer noch hält Sie auf einige Ressourcen. Ein Beispiel gab er, wie ein zombie-thread könnte brechen ein system war ein thread beginnt einige Verfahren nach dem sperren auf ein Objekt, und dann ist irgendwann beendet, bevor die Sperre freigegeben werden kann. Diese situation hat das Potenzial zu einem Absturz des Systems, denn schließlich, versucht, die execute-Methode wird das Ergebnis in die alle threads, die darauf warten für den Zugriff auf ein Objekt, wird nie zurückgegeben werden, weil der thread, der den gesperrten Objekt tot ist.

Ich denke ich habe den Kern dieses, aber wenn ich bin off base, lassen Sie es mich bitte wissen. Das Konzept machte Sinn für mich. Ich war nicht völlig überzeugt, dass dies ein realistisches Szenario, was passieren könnte .NET. Ich habe noch nie zuvor gehört "zombies", aber ich erkenne, dass die Programmierer gearbeitet haben, in Tiefe, in den unteren Ebenen haben tendenziell ein tieferes Verständnis der computing-Grundlagen (wie threading). Ich auf jeden Fall tun, sehen den Wert zu sperren, aber, und ich habe gesehen, viele Weltklasse-Programmierer Hebel sperren. Ich habe auch nur eingeschränkte Möglichkeiten, um das zu beurteilen für mich, weil ich weiß, dass die lock(obj) - Anweisung ist eigentlich nur syntaktischer Zucker für:

bool lockWasTaken = false;
var temp = obj;
try { Monitor.Enter(temp, ref lockWasTaken); { body } }
finally { if (lockWasTaken) Monitor.Exit(temp); }

und weil Monitor.Enter und Monitor.Exit gekennzeichnet sind extern. Es scheint denkbar, dass .NET hat einige Art der Verarbeitung, schützt das Gewinde vor der Exposition gegenüber Systemkomponenten, hätte diese Art von Einfluss, aber das ist rein spekulativ und wohl nur auf der Tatsache beruht, dass habe ich noch nie gehört "zombie-threads" vor. So, ich hoffe ich bekomme etwas feedback dazu hier:

  1. Gibt es eine klarere definition von "zombie-thread" als das, was ich erklärt habe hier?
  2. Können zombie-threads treten auf .NET? (Warum/warum nicht?)
  3. Wenn ja, Wie könnte ich die Kraft, die Schaffung eines zombie-thread .NET?
  4. Wenn ja, Wie kann ich den Hebel verriegeln, ohne zu riskieren einen zombie-thread-Szenario .NET?

Update

Fragte ich diese Frage ein wenig vor über zwei Jahren. Heute passiert:

Gibt es Zombies? In .NET?

InformationsquelleAutor der Frage smartcaveman | 2013-11-19

Schreibe einen Kommentar