Laden...

Buch zu den .NET-Internas?

Erstellt von Palladin007 vor 3 Jahren Letzter Beitrag vor 3 Jahren 4.196 Views
Palladin007 Themenstarter:in
2.078 Beiträge seit 2012
vor 3 Jahren
Buch zu den .NET-Internas?

Guten Abend/Morgen,

ich suche nach einem Buch, das die Internas von .NET (Threading, GC, CLR, what ever) erklärt.
Wenn es kein Buch gibt, dann tut's auch irgendetwas online, aber am Ende hab ich doch lieber ein Buch in der Hand.

Mir geht's dabei darum, dass ich einzelne Dinge besser einschätzen kann, wie z.B. die verschiedenen Möglichkeiten, die Arbeit in mehreren Threads untereinander zu synchronisieren. Gerade bei solchen Themen macht man ja schnell Fehler, weil man es gut meint, denkt und dabei im besten Fall mit Kanonen auf Spatzen schießt, aber im schlimmsten Fall grausig zu findende Fehler einbaut.

Kann da jemand etwas empfehlen?
Wäre schön, wenn es nicht ganz so alt ist, am liebsten wäre mir eine moderne Variante bezüglich .NET Core/5, was aber auch noch Parallelen zum "klassischen" .NET zieht.

Deutsch wäre super, aber ist kein Muss.

Ich hab dazu nur dieses recht alte Thema gefunden: c# und java internals
Die Seminare hab ich schon als PDF runtergeladen, aber vielleicht kennt hier jemand neuere/bessere Lektüre dazu?

Beste Grüße

87 Beiträge seit 2016
vor 3 Jahren

Hallo,

C# 8.0 in a Nutshell: The Definitive Reference
978-1492051138

glandorf

16.807 Beiträge seit 2008
vor 3 Jahren

Ehrlich gesagt denke ich nicht, dass Du hier das eine absolute Buch finden wirst, sondern auf verschiedene Bücher setzen musst.

Das Buch The Definitive Reference ist gut geht aber lang nicht so tief in gewisse Themen ein wie zB das Buch von Konrad Kokosa über .NET Speicher Management.

Palladin007 Themenstarter:in
2.078 Beiträge seit 2012
vor 3 Jahren

"Pro .NET Memory Management: For Better Code, Performance, and Scalability" von Konrad Kokosa

Ist notiert - danke.
Dann ist das Thema bzw. sind die Themen wohl größer als gedacht - aber davon war auszugehen.

Gibt's denn noch andere Bücher, die Du empfehlen kannst, oder kennst Du eine Übersicht solcher Bücher, die man gelesen haben muss, wenn man sich für sowas interessiert?
Das Buch "C# 8.0 in a Nutshell: The Definitive Reference" klingt mehr wie eine Sprach- und Framework-Referenz und scheint keinen tiefgehenden Einblick zu bieten - also nicht das, was ich suche.

Und wenn es (hier) noch keine Übersicht für sowas gibt, dann kann das doch eine solche Übersicht werden.

16.807 Beiträge seit 2008
vor 3 Jahren

Ich bin mir nicht sicher was Du wirklich suchst, denn

Mir geht's dabei darum, dass ich einzelne Dinge besser einschätzen kann, wie z.B. die verschiedenen Möglichkeiten, die Arbeit in mehreren Threads untereinander zu synchronisieren. ist ja ein generelles Thema von Software Architektur und weniger was im Hinblick was unter der Haube bei .NET passiert.

Ich behaupte ich bin durchaus fortgeschritten, was Software Architektur, Pattern und .NET sowie C# betrifft und weiß durchaus solche Konzepte anzuwenden.
Aber bei weiten, um Welten komme ich nicht an das Unter-der-Haube-Wissen von gfoidl ran; der hat da mehr als nur eine Schippe mehr Plan als ich.

Muss aber auch sagen; ich brauche das für meine tägliche Arbeit gar nicht. Anders als gfoidl habe ich nicht soooo sehr mit tiefen .NET Themen zutun oder "muss damit zutun haben".

6.911 Beiträge seit 2009
vor 3 Jahren

Hallo Palladin007,

die verschiedenen Möglichkeiten, die Arbeit in mehreren Threads untereinander zu synchronisieren

Auch wenns alt ist, ist es immer noch korrekt und ein "Klassiker": http://www.albahari.com/threading/
An den grundlegenden Dingen wird sich hier auch in Zukunft nichts ändern, da die Konzepte für CPUs und Speichermodelle sich "hier nicht weiterentwickeln". Das wäre ggf. mächtige Brüche mit der Kompatibilität.

http://joeduffyblog.com/ (v.a. die alten Beiträge) sind hier ebenfalls eine gute Quelle, die teils sehr in die Tiefe gehen -- nicht zuletzt wegen Joe Duffys damaligen Job für das entsprechende .NET Team.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

Palladin007 Themenstarter:in
2.078 Beiträge seit 2012
vor 3 Jahren

Ich hatte gehofft, ein Buch zu finden, in dem ich Abends (oder wann auch immer) ohne PC darin lesen und so mein Allgemeinwissen etwas spezifischer ausweiten kann.

Das von Abt verlinkte Pro .NET Memory Management ist jetzt auf jeden Fall auf meiner Wunschliste.

Und die (auch hier) verlinkten Blogs hab ich mir auch notiert.

49.485 Beiträge seit 2005
vor 3 Jahren

Hallo Palladin007,

also ich kann http://www.albahari.com/threading/ auch nur sehr empfehlen. Ich glaube nicht, dass es was besseres als Buch gibt bzw. das ist ja eigentlich ein Buch/PDF.

Wobei ich so konkret an Code bzw. Konstrukten orientierte Themen eh nicht ohne PC lesen kann, da ich das Gelesene immer sofort in konkrete Beispielprogramme umsetzten und ausprobieren muss. Allerdings hilft Testen im klassischen Sinne bei Nebenläufigkeit nur sehr begrenzt. Da muss man dann besser einen bösartigen Scheduler spielen. Und das erfordert - zumindest bei mir - höchste Konzentration. Das kann ich eh nur am Schreibtisch - und da steht dann sowieso der PC. Womit sich der Kreis schließt.

Zum bösen Scheduler habe ich in SyncQueue <T> - Eine praktische Job-Queue einen - wie ich finde sehr lehrreichen - Fall angegeben, wo man den Fehler durch Testen wohl kaum gefunden hätte und in SyncQueue<T> erweitern: Enqueue blockiert bei voller Queue (in: "Das Programmier-Spiel") folgende Erläuterung geschrieben, wie man vorgehen kann/sollte, um solche Fälle aufzudecken:

[...] weil der Reiz dieser Aufgabe in meinen Augen in gerade im Knobeln und im Kniffligen liegt. Man muss das Ganze wirklich tief durchdenken. Man muss, wie in dem o.g. Link exemplarisch beschrieben, versuchen, einen möglichst bösartigen Benutzer und zusätzlich einen möglichst fiesen Scheduler zu spielen. Der Benutzer führt die Aufrufe in möglichst böser Reihenfolge in einer vertrackten Umgebung von Threads aus und der Scheduler zerhackt das Ganze noch in möglichst ungünstige Häppchen und wechselt zum jeweils unpassendsten Thread. Und dann muss immer noch alles stimmen.

Den bösen Benutzer kann man natürlich auch in Form von gemeinen Testprogrammen "spielen". Aber den bösen Scheduler kann man bei einem Test, bei dem man das Programm einfach laufen lässt, gar nicht oder nur sehr, sehr schwer simulieren. Das geht weit besser im Kopf. [...]

Wer selbst fiesen Scheduler spielen möchte, kann das - für mehrere andere Synchronisierungsaufgaben - auf der extrem coolen Seite
>
tun. Per Knopfdruck kann man dort bestimmen, welcher Thread die jeweils nächste Anweisung ausführen soll und man sieht quasi wie im Debugger sofort, wie sich daraufhin der Programmzustand ändert. Dabei ist es (Spiel-)Ziel, die (jeweils nicht korrekt implementierte) Synchronisierung auszutricksen oder das Programm in einen Ausnahmezustand zu versetzen.

In diesem Zitat "versteckt" sich der Link auf eine weitere Quelle, die ich - neben der Prosa - hier noch beisteuern wollte.

herbivore

PS: Damit man nicht jeden Anwendungscode so intensiv auf Probleme mit der Nebenläufigkeit untersuchen zu müssen, bietet es sich an, im Anwendungscode nicht selbst die Konstrukte (Semaphoren, Kritische Abschnitte, ...) der Nebenläufigkeit zu verwenden, sondern eben solche Klassen wie die SyncQueue, die einem die Details der Synchronisation abnehmen und bei denen man sehr wenig beachten muss (im Grunde genommen nur, dass der einstellende Thread nur bis zum Einstellen auf die gemeinsamen Daten zugreift und der herausholende erst ab/nach dem Herausholen.