Vorwort

Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com

Ich denke, das Tier auf dem Cover, ein gewöhnlicher Palmzibet, passt zum Thema dieses Buches. Ich wusste nichts über dieses Tier, bis ich das Cover sah, also habe ich es nachgeschlagen. Gemeine Palmzibetkatzen gelten als Schädlinge, weil sie überall auf Dachböden koten und laute Geräusche von sich geben, wenn sie miteinander kämpfen. Ihre analen Duftdrüsen geben ein ekelerregendes Sekret ab. Sie sind vom Aussterben bedroht ("Least Concern"), was anscheinend die politisch korrekte Art ist, zu sagen: "Tötet so viele von ihnen, wie ihr wollt; niemand wird sie vermissen." Palmzibetkatzen fressen gerne Kaffeekirschen und geben die Kaffeebohnen weiter. Kopi luwak, einer der teuersten Kaffees der Welt, wird aus den Kaffeebohnen hergestellt, die aus den Ausscheidungen der Zibetkatzen gewonnen werden. Laut der Specialty Coffee Association of America "schmeckt er einfach schlecht".

Das macht die gemeine Palmenzibetkatze zu einem perfekten Maskottchen für nebenläufige und multithreadingfähige Entwicklung. Für Uneingeweihte sind Parallelität und Multithreading unerwünscht. Sie führen dazu, dass sich braver Code auf die schrecklichste Art und Weise verhält. Race Conditions und dergleichen verursachen heftige Abstürze (immer, so scheint es, entweder in der Produktion oder während einer Demo). Manche gehen sogar so weit, dass sie sagen: "Threads sind böse" und vermeiden die Gleichzeitigkeit komplett. Es gibt eine Handvoll Entwicklerinnen und Entwickler, die auf den Geschmack gekommen sind und die Parallelität ohne Angst nutzen; aber die meisten Entwicklerinnen und Entwickler haben sich in der Vergangenheit an der Parallelität verbrannt, und diese Erfahrung hat einen schlechten Geschmack hinterlassen.

Für moderne Anwendungen wird die Gleichzeitigkeit jedoch schnell zu einer Voraussetzung. Die Benutzer erwarten heutzutage reaktionsschnelle Benutzeroberflächen, und die Serveranwendungen müssen in einem noch nie dagewesenen Umfang skaliert werden. Gleichzeitigkeit ist die Antwort auf diese beiden Trends.

Zum Glück gibt es viele moderne Bibliotheken, die Parallelität viel einfacher machen! Parallelverarbeitung und asynchrone Programmierung sind nicht mehr ausschließlich die Domäne von Assistenten. Indem sie die Abstraktionsebene anheben, machen diese Bibliotheken die reaktionsschnelle und skalierbare Anwendungsentwicklung zu einem realistischen Ziel für jeden Entwickler. Wenn du in der Vergangenheit verbrannt wurdest, als Gleichzeitigkeit extrem schwierig war, dann ermutige ich dich, es mit modernen Tools noch einmal zu versuchen. Gleichzeitigkeit kann man wahrscheinlich nie als einfach bezeichnen, aber sie ist sicher nicht mehr so schwer, wie sie einmal war!

Wer sollte dieses Buch lesen?

Dieses Buch richtet sich an Entwickler, die moderne Ansätze zur Gleichzeitigkeit lernen wollen. Ich setze voraus, dass du über ein gewisses Maß an .NET-Erfahrung verfügst, einschließlich eines Verständnisses von generischen Collections, Enumerables und LINQ. Ich erwarte nicht, dass du über Kenntnisse in Multithreading oder asynchroner Programmierung verfügst. Wenn du in diesen Bereichen bereits Erfahrungen gesammelt hast, kann dieses Buch trotzdem hilfreich sein, da es neuere Bibliotheken vorstellt, die sicherer und einfacher zu verwenden sind.

Gleichzeitigkeit ist für jede Art von Anwendung nützlich. Es spielt keine Rolle, ob du an Desktop-, Mobil- oder Serveranwendungen arbeitest; heutzutage ist Gleichzeitigkeit praktisch eine Voraussetzung für alle Anwendungen. Mit den Rezepten in diesem Buch kannst du Benutzeroberflächen reaktionsschneller und Server skalierbarer machen. Wir sind bereits an einem Punkt angelangt, an dem Gleichzeitigkeit allgegenwärtig ist, und das Verständnis dieser Techniken und ihrer Einsatzmöglichkeiten ist für professionelle Entwickler/innen unverzichtbares Wissen.

Warum ich dieses Buch geschrieben habe

Am Anfang meiner Karriere habe ich Multithreading auf die harte Tour gelernt. Nach ein paar Jahren lernte ich die asynchrone Programmierung auf die harte Tour. Das waren zwar beides wertvolle Erfahrungen, aber ich wünschte, ich hätte damals schon einige der Tools und Ressourcen gehabt, die heute zur Verfügung stehen. Insbesondere die Unterstützung von async und await in modernen .NET-Sprachen ist pures Gold.

Wenn du dir heute Bücher und andere Ressourcen zum Erlernen der Gleichzeitigkeit ansiehst, beginnen sie fast alle mit der Einführung der einfachsten Konzepte. Threads und Serialisierungsprimitive werden sehr gut behandelt, während die höherwertigen Techniken, wenn überhaupt, erst später behandelt werden. Ich glaube, dafür gibt es zwei Gründe. Erstens haben viele Entwickler von Parallelität, wie ich selbst, zuerst die Low-Level-Konzepte gelernt und sich durch die Old-School-Techniken gequält. Zweitens sind viele Bücher schon Jahre alt und behandeln veraltete Techniken. Als die neueren Techniken verfügbar wurden, sind diese Bücher zwar aktualisiert worden, haben sie aber leider an das Ende gestellt.

Ich denke, das ist rückständig. Tatsächlich behandelt dieses Buch nur moderne Ansätze zur Gleichzeitigkeit. Das heißt aber nicht, dass es nicht wertvoll ist, alle Low-Level-Konzepte zu verstehen. Als ich an der Uni programmierte, hatte ich einen Kurs, in dem ich eine virtuelle CPU aus einer Handvoll Gattern bauen musste, und einen anderen Kurs, in dem es um Assembler-Programmierung ging. In meiner beruflichen Laufbahn habe ich zwar nie eine CPU entwickelt und nur ein paar Dutzend Assemblerzeilen geschrieben, aber mein Verständnis der Grundlagen hilft mir trotzdem jeden Tag. Trotzdem ist es am besten, mit den höheren Abstraktionen zu beginnen; mein erster Programmierkurs war nicht in Assembler.

Dieses Buch füllt eine Nische: Es ist eine Einführung in (und ein Nachschlagewerk für) Gleichzeitigkeit mit modernen Ansätzen. Es behandelt verschiedene Arten der Gleichzeitigkeit, darunter parallele, asynchrone und reaktive Programmierung. Es behandelt jedoch keine der Techniken der alten Schule, die in vielen anderen Büchern und Online-Ressourcen ausreichend behandelt werden.

Navigieren in diesem Buch

So ist das Buch aufgeteilt:

  • Kapitel 1 ist eine Einführung in die verschiedenen Arten der Gleichzeitigkeit, die in diesem Buch behandelt werden: parallel, asynchron, reaktiv und Datenfluss.

  • Die Kapitel 2-6 bieten eine gründlichere Einführung in diese Arten der Gleichzeitigkeit.

  • Die übrigen Kapitel befassen sich jeweils mit einem bestimmten Aspekt der Gleichzeitigkeit und dienen als Referenz für die Lösung gängiger Probleme.

Ich empfehle dir, das erste Kapitel zu lesen (oder zumindest zu überfliegen), auch wenn du bereits mit einigen Arten von Gleichzeitigkeit vertraut bist.

Warnung

Bei Redaktionsschluss dieses Buches befindet sich .NET Core 3.0 noch in der Beta-Phase, sodass sich einige Details zu asynchronen Streams noch ändern können.

Online-Ressourcen

Dieses Buch ist eine breit angelegte Einführung in verschiedene Arten der Gleichzeitigkeit. Ich habe mein Bestes getan, um die Techniken einzubeziehen, die ich und andere als besonders hilfreich empfunden haben, aber dieses Buch ist keineswegs erschöpfend. Die folgenden Quellen sind die besten, die ich gefunden habe, um diese Technologien genauer zu erforschen:

  • Die beste Quelle für die parallele Programmierung ist meines Wissens das Buch Parallel Programming with Microsoft .NET von Microsoft Press, das online verfügbar ist. Leider ist es schon ein bisschen veraltet. Der Abschnitt über Futures sollte stattdessen asynchronen Code verwenden, und der Abschnitt über Pipelines sollte Channels oder TPL Dataflow verwenden.

  • Für asynchrone Programmierung ist MSDN recht gut, insbesondere die Übersicht "Asynchrone Programmierung".

  • Microsoft hat auch eine Dokumentation für TPL Dataflow zur Verfügung gestellt .

  • System.Reactive (Rx) ist eine Bibliothek, die online immer mehr an Bedeutung gewinnt und sich ständig weiterentwickelt. Meiner Meinung nach ist die beste Ressource für Rx derzeit Introduction to Rx, ein ebook von Lee Campbell.

In diesem Buch verwendete Konventionen

Die folgenden typografischen Konventionen werden in diesem Buch verwendet:

Kursiv

Weist auf neue Begriffe, URLs, E-Mail-Adressen, Dateinamen und Dateierweiterungen hin.

Constant width

Wird für Programmlistings sowie innerhalb von Absätzen verwendet, um auf Programmelemente wie Variablen- oder Funktionsnamen, Datenbanken, Datentypen, Umgebungsvariablen, Anweisungen und Schlüsselwörter hinzuweisen.

Constant width bold

Zeigt Befehle oder anderen Text an, der vom Benutzer wörtlich eingegeben werden muss.

Constant width italic

Zeigt Text an, der durch vom Benutzer eingegebene Werte oder durch kontextabhängige Werte ersetzt werden soll.

Tipp

Dieses Element steht für einen Tipp oder eine Anregung.

Hinweis

Dieses Element steht für einen allgemeinen Hinweis.

Warnung

Dieses Element weist auf eine Warnung oder einen Warnhinweis hin.

Code-Beispiele verwenden

Zusätzliches Material von (Code-Beispiele, Übungen usw.) steht unter https://oreil.ly/concur-c-ckbk2 zum Download bereit .

Dieses Buch soll dir helfen, deine Arbeit zu erledigen. Wenn in diesem Buch Beispielcode angeboten wird, darfst du ihn in deinen Programmen und deiner Dokumentation verwenden. Du musst uns nicht um Erlaubnis fragen, es sei denn, du reproduzierst einen großen Teil des Codes. Wenn du zum Beispiel ein Programm schreibst, das mehrere Teile des Codes aus diesem Buch verwendet, brauchst du keine Erlaubnis. Wenn du eine CD-ROM mit Beispielen aus den O'Reilly-Büchern verkaufst oder verteilst, ist eine Genehmigung erforderlich. Die Beantwortung einer Frage mit einem Zitat aus diesem Buch und einem Beispielcode erfordert keine Genehmigung. Wenn du einen großen Teil des Beispielcodes aus diesem Buch in die Dokumentation deines Produkts aufnimmst, ist eine Erlaubnis erforderlich.

Wir freuen uns über eine Namensnennung, verlangen sie aber nicht. Eine Quellenangabe umfasst normalerweise den Titel, den Autor, den Verlag und die ISBN. Zum Beispiel: "Concurrency in C# Cookbook, Second Edition, von Stephen Cleary (O'Reilly). Copyright 2019 Stephen Cleary, 978-1-492-05450-4."

Wenn du der Meinung bist, dass die Verwendung von Code-Beispielen nicht unter die Fair-Use-Regelung oder die oben genannte Erlaubnis fällt, kannst du uns gerne unter kontaktieren

O'Reilly Online Learning

Hinweis

Seit fast 40 Jahren bietet O'Reilly Media Schulungen, Wissen und Einblicke in Technologie und Wirtschaft, um Unternehmen zum Erfolg zu verhelfen.

Unser einzigartiges Netzwerk von Experten und Innovatoren teilt sein Wissen und seine Erfahrung durch Bücher, Artikel, Konferenzen und unsere Online-Lernplattform. Die Online-Lernplattform von O'Reilly bietet dir On-Demand-Zugang zu Live-Trainingskursen, ausführlichen Lernpfaden, interaktiven Programmierumgebungen und einer umfangreichen Text- und Videosammlung von O'Reilly und über 200 anderen Verlagen. Weitere Informationen findest du unter http://oreilly.com.

Wie du uns kontaktierst

Bitte wende dich unter mit Kommentaren und Fragen zu diesem Buch an den Verlag:

  • O'Reilly Media, Inc.
  • 1005 Gravenstein Highway Nord
  • Sebastopol, CA 95472
  • 800-998-9938 (in den Vereinigten Staaten oder Kanada)
  • 707-829-0515 (international oder lokal)
  • 707-829-0104 (Fax)

Wir haben unter eine Webseite für dieses Buch, auf der wir Errata, Beispiele und zusätzliche Informationen auflisten. Du kannst diese Seite unter https://oreil.ly/concur-c-ckbk2 aufrufen .

Wenn du Kommentare oder technische Fragen zu diesem Buch stellen möchtest, sende eine E-Mail an

Weitere Informationen zu unseren Büchern, Kursen, Konferenzen und Neuigkeiten findest du auf unserer Website unter http://www.oreilly.com.

Finde uns auf Facebook: http://facebook.com/oreilly

Folge uns auf Twitter: http://twitter.com/oreillymedia

Schau uns auf YouTube: http://www.youtube.com/oreillymedia

Danksagungen

Ohne die Hilfe so vieler Menschen würde es dieses Buch nicht geben!

Zuallererst möchte ich mich zu meinem Herrn und Retter, Jesus Christus, bekennen. Christ zu werden war die wichtigste Entscheidung meines Lebens! Wenn du mehr über dieses Thema erfahren möchtest, kannst du mich gerne über meine persönliche Webseite kontaktieren.

Zweitens danke ich meiner Familie, dass ich so viel Zeit mit ihr verbringen darf. Als ich mit dem Schreiben anfing, sagten mir einige befreundete Autoren: "Verabschiede dich für das nächste Jahr von deiner Familie!" und ich dachte, sie machen Witze. Meine Frau Mandy und unsere Kinder SD und Emma waren sehr verständnisvoll, während ich lange Arbeitstage hatte und abends und an den Wochenenden schrieb. Ich danke euch so sehr. Ich liebe euch!

Natürlich wäre dieses Buch nicht annähernd so gut, wie es ist, ohne meine Redakteure und unsere technischen Prüfer: Stephen Toub, Petr Onderka ("svick"), Nick Paldino ("casperOne"), Lee Campbell und Pedro Felix. Wenn also irgendwelche Fehler durchkommen, ist das ganz allein ihre Schuld. Nur ein Scherz! Ihr Beitrag war von unschätzbarem Wert für die Gestaltung (und Korrektur) des Inhalts, und alle verbleibenden Fehler sind natürlich meine eigenen. Ein besonderer Dank geht an Stephen Toub, der mir den Boolean Argument Hack(Rezept 14.5) und unzählige andere async Themen beigebracht hat, und an Lee Campbell, der mir geholfen hat, System.Reactive zu lernen und meinen beobachtbaren Code idiomatischer zu machen.

Abschließend möchte ich mich bei einigen Leuten bedanken, von denen ich diese Techniken gelernt habe: Stephen Toub, Lucian Wischik, Thomas Levesque, Lee Campbell, den Mitgliedern von Stack Overflow und den MSDN-Foren sowie den Teilnehmern der Softwarekonferenzen in und um meinen Heimatstaat Michigan. Ich schätze es sehr, ein Teil der Softwareentwicklungsgemeinschaft zu sein, und wenn dieses Buch einen Mehrwert bietet, dann deshalb, weil so viele bereits den Weg gewiesen haben. Ich danke euch allen!

Get Concurrency in C# Cookbook, 2. Auflage now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.