2009-11-17 14 views
7

Ich fragte mich, warum, im Gegensatz zu Scala, F # oder Haskell, das grundlegende .NET Framework (wie in C# oder VB verfügbar) sehr wenig native Unterstützung für höhere Gleichzeitigkeitsmuster zu haben scheint .High-Level Multithreading/Concurrency Abstraktionen für .NET

Es gibt grundlegende Mechanismen zur Verfügung - Schlösser, Monitore, die Thread-Pool - aber was ist

  • Synchronisierte Variablen (MVar)
  • Synchrone Kanäle
  • Asynchronous Kanäle (siehe Go oder Haskell)
  • Akteure/Nachrichtenübergabe (Erlang-Style)
  • Futures
  • Parallele Berechnungen/Listenfunktionen
  • Composable asynchrone Berechnungen durch Linq (wie F # 's async {})

oder auch Software Transactional Memory (STM for Haskell)

Und selbst Rechnung getragen ParallelFX ist diese Liste nur teilweise abgedeckt .

Gibt es bestimmte tiefere Gründe gegen die Bereitstellung solcher Funktionen (und stattdessen wollen Menschen mit IAsyncResult summieren) oder soll dies in Zukunft integriert werden?

+0

Es gibt eine große Menge an funktionaler Überlappung in Ihrer Liste. Ich glaube nicht, dass ich das alles in einer Umgebung haben möchte. –

+0

Zum einen, im Gegensatz zu Ihren Beispielsprachen.NET Framework wurde nur mit dem objektorientierten Paradigma entworfen, Scala ist Multiparadigma, F # und Haskell sind funktional. – SpaceghostAli

+4

@SpaceghostAli - Wie können Sie sagen, dass .NET nur für das objektorientierte Paradigma entwickelt wurde, gefolgt von der Aussage F # (eine Sprache, die darauf läuft) ist funktional? Vergessen Sie auch Dinge wie Linq, die ausschließlich für die funktionale Programmierung gedacht sind? –

Antwort

6

Es gibt aktive und laufende Forschung über die besten und effektivsten Abstraktionen, die verwendet werden können, um gleichzeitige Software zu ermöglichen, ohne die Minutiae b/c zu meistern, die entweder keine Zeit oder Neigung haben, ihre Fähigkeiten auf diesem Niveau zu entwickeln.

Vor diesem Hintergrund hat der BCL eine ziemlich hohe Eintrittshürde für neue Konzepte, aber das bedeutet nicht, dass sie nicht passieren. Zuletzt, in .Net 4, wird die Einführung der Task Parallel Library sein. Frühere Versionen der TPL tatsächlich included a Future<T> type, die seither durch newerabstractions ersetzt worden ist.

Es gibt auch aktive Forschung in der Arena von Kanälen/etc über die Forschungssprache Axum.

Ich bin offensichtlich nicht Teil des Teams und ich arbeite nicht für Microsoft, aber mein Verständnis ist, dass es einen Wunsch gibt, in diesem Bereich zu innovieren, jenseits dessen, was bereits allgemein verfügbar ist.

+0

Die TPL ist für Parallelität, nicht Nebenläufigkeit. –

+0

Das ist richtig. Axum war die Nebenläufigkeitsforschung, und die gewinnbringenden Konzepte werden nun (offensichtlich) in .Net 4.5 eingeführt. –

2

Ich stimme Greg D, es gibt eine Menge "Zeug" kommen. MS mit dem neuen .Net4-Framework und ihrem Axum-Projekt. Das Problem, das ich bei all diesen Ansätzen sehe, ist, dass sie extrem kompliziert werden und dass Fähigkeiten, Wissen und Erfahrung in den Bereichen verteiltes/paralleles/verteiltes Rechnen eher "begrenzt" sind. Ich schreibe das nicht, um jemanden zu beleidigen, aber ich denke, dass Universitäten und Pädagogen im Allgemeinen diesen Themen mehr Aufmerksamkeit widmen müssen. Aber, was ich denke und hoffe, ist das Mainstream-Bewusstsein, dass MS mit der Implementierung vieler dieser Ideen, Axum, Asynchronous Agents Library usw. und dem allgemeinen Trend/Bedarf an Multi-Core/Cloud-Computer-System erstellt, dass wir werde bald mehr sehen :)

+0

Nun, da du die Teile von Axum sehen und anfassen kannst, die es zum Mainstream machen, denkst du immer noch, dass sie extrem kompliziert sind (vermutlich komplizierter, als mit den Primitiven zu arbeiten, die sie aktivieren)? –