Dieser Artikel wurde maschinell übersetzt.

Fangen Sie bitte nicht mit diesem Thema an

Der Dampfbohrer

David Platt

David PlattJohn Henry sagte zum Kapitän, "ein Mann ist nur ein Mann Aber bevor ich Ihren Dampf-Drill mir brannte lassen, ich werde sterben mit einem Hammer in der Hand."

— "The Ballad of John Henry," American traditionelle

John Henry nimmt einen mächtigen Platz im amerikanischen Folklore (bit.ly/3HqIMd). Einige Leute sagen er ist einfach ein beliebtes Märchen, aber andere bestehen darauf, dass er ein echter Mann beruht. John Henry "fuhr Steel" in den späten 1800er hämmerte einen Vorschlaghammer auf einem Stahl Bohrstange, bohren Löcher in Felsen zum Strahlen Eisenbahn Tunnel. Wenn ein dampfbetriebener Bohrer seinen Job bedroht, John Henry forderte es zu einem Duell – und gewann. John Henry fuhr 16 Fuß und der Dampf-Bohrer nur neun gemacht", sagt die Ballade. Aber egal welche Version des Liedes Sie hören, es endet immer schlecht: "Er war so hart, er brach sein armes Herz, so dass er seinen Hammer gemäß und er starb."

Was hat so ein Typ der Quintessenz Hardware mit Software zu tun, ich höre euch Fragen. Ich hatte meine eigene John Henry Moment in der vergangenen Woche Unterricht Themen in meiner Klasse "Programming Microsoft.NET" am Harvard Extension. Ich begann meine Schüler mit rohen Threads, zeigte ihnen den Threadpool dann arbeitete in die Designprobleme der Synchronisation und Threadaffinität. Ich endete mit eine brutale Hausaufgabe, die den Threadpool verwenden versucht aber auferlegten Anforderungen, die es nicht erlauben. (Student: "Platt, du bist ein sadistisches Schwein." Me: "Ja, was ist dein Punkt?")

Die nächste Woche, ich ihnen die Task Parallel Library (TPL), mit seinem Parallel.For und Parallel.ForEach zeigte, erstellt. Ich sagte ihnen, dass ich selbst es nicht vertrauen. Es war auch neu. Und es nicht mich retten, genügend Zeit und Mühe für den Verlust von Kontrolle und Transparenz zu kompensieren. Dann wurde mir klar was ich Dinosaurier, die ich geworden wäre.

Jeder Fortschritt in der Computertechnik hat eine neue Abstraktionsschicht generiert. Und mit jeder höheren Abstraktionsebene, die Programmierer, die mächtig bemühte sich um die untere Ebene zu meistern wütend. Jetzt kann jeder Idiot machen was sie erwischt ihren Eseln zu lernen. Nicht fair!

Wenn diese Dinger Magnetplattenspeicher zuerst herauskam, Programmierer hatten beispielsweise die Hardware direkt das Kommando — Kopf 3, Bewegung verfolgen 19, warten Sektor 247 zu kommen und dann zu lesen. Dann einige Schlaumeier herausgefunden, wie die Hardware hinter einer Software-Abstraction-Layer ausblenden, die eine logisch zusammenhängende Folge von Bytes, die eine temporäre Datei namens zur Verfügung gestellt.

"Es ist so ineffizient," schrie die zu werden. "Ihr Kinder diese Tage haben keinen Respekt für Ressourcen. Denke der Zielbereiche vergeudet durch, was tun Sie sie Verzeichnisse nennen?"

"Sie Haufen alter Knacker," feixend die Kinder. "Programmieren Sie immer noch mit nur Einsen und Nullen?"

Wann springen ich von Upstart zu Fogey? Ich habe kein Problem mit dem Threadpool. Ich zeigen Studenten wie es überwacht die CPU-Auslastung des Threads, der Job mehr Threads zuweisen, wenn einige von ihnen blockieren. Aber dort sehe ich die Threads im Gegensatz zu der TPL, wo sie versteckt sind.

Ich fand immer, es gibt keinen Ersatz für Sie zu wissen, was unter der Haube vor sich geht. Abstraktionen Leck immer. Festplatten werden fragmentiert, Streuung von Dateien über unbequeme Clustern, die verschwenderisch Bewegung aus Metall erfordern. Die Studenten, die das beste in mein MFC-Klasse Jahren tat seien diejenigen mein Rat beachtet um Charles Petzold-Klassiker über die Windows-API zu studieren. Immer wenn ich einen Kunden threading-bezogenen Problem beheben es immer – und ich meine jedes Mal, ohne Ausnahme — ergibt sich aus einem grundlegenden Missverständnis was ein Thread ist und tut.

Also los, verwenden Sie die TPL Parallel.For und Parallel.ForEach. Aber benutzen Sie sie als eine Krücke nicht verstehen wie sie wirklich funktionieren, es ist wie mit einem Innenrohr, in die Mitte des Boston Harbor Paddeln ohne zu wissen, wie man schwimmt. Sie werden für die Küstenwache, für Leute wie mich, Rettung kommen Sie schreien werden. Zum Glück sind wir am ball, denn wir wissen, dass wir sein muss. Eine Geek ist nur ein Geek. Und bevor ich Ihr mir brannte TPL lassen, ich werde sterben mit einem Thread-Griff in der Hand.

David S. Platt Programmierung .net an der Harvard University Extension School und bei Firmen auf der ganzen Welt lehrt. Er ist der Autor von 11 Programmierung Bücher, darunter "Warum Software Sucks" (Addison-Wesley Professional, 2006) und "Introducing Microsoft.NET" (Microsoft Press, 2002). Microsoft nannte ihn einen Software-Legende im Jahr 2002. Er fragt sich, ob er zwei seiner Tochter Finger kleben sollte, damit sie lernt, wie man in oktal zählen. Sie erreichen ihn unter rollthunder.com.