Parallelität in web-Anwendungen
So, in letzter Zeit gab es sehr viel Wert, die von fast allen Plattform-Anbietern, um neue tools/language Konstrukte für eine bessere Parallelität. Und das ist auch einer der Gründe, warum viele der Ideen aus den funktionalen Programmiersprachen eingebunden in die mainstream-Sprachen wie C#, Java, etc.
Obwohl diese sehr sinnvoll, heute speziell mit der Einführung der multi-core-CPUs, aber ich wollte wissen, wie kann man diese verwenden, speziell im Bereich der web-Anwendungen. In web-apps eine Menge von der Parallelität wird verwaltet von der web-server selbst und sehr selten sehe ich multi-threading implementiert, die innerhalb von web-Seiten. AJAX ermöglichte auch die "pagelets" wie Paradigma weiter zu helfen.
Web-Anwendungen bestehen in der Regel Holen die Ergebnisse schnell und bis jetzt haben wir genutzt, viele Taktiken wie caching, Redundanz, etc. um dieses Ziel zu erreichen. Wenn es war etwas, das rechenintensiven es passieren musste offline - (und die Kunden könnten Abfrage für die Ergebnisse später oder Rückrufe, die umgesetzt werden könnten).
Parallelität in der Art bereits umgesetzt in eine Menge von Bibliotheken/frameworks, die in der Regel in web-Anwendungen wie Datenbank -, multi-bekommt in frameworks wie memcached.
Konnte ich nicht finden eine Menge von Beispiel-Szenarien, in denen die jüngsten Parallelität Plattformen und Bibliotheken verwendet werden können, im Kontext von web-apps. Also ich würde gerne wissen, ob Sie sehr viel Sinn machen in der web-Domäne.
- Könnten Sie bitte verfeinern Sie genau, was Sie Fragen?
- Also ich wollte wissen, wie sich Menschen untersucht haben, die neuen concurrency-Konstrukte und Bibliotheken in web-Anwendungen.
- Ich denke, das ist eine sehr scharfsinnige Frage. Ich glaube nicht, dass web-Anwendungen eigentlich sehr viel natürliches Bedürfnis für die Parallelität hinaus, was der container bereits bietet. Ich fürchte, dass die neuen concurrency-features, die sich jetzt nicht annähernd so nützlich wie Leute denken, Sie sind. Wir treffen uns wieder an dieser Frage in, sagen wir, zehn Jahren, und sehen, wie es geklappt hat.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den strengen Blick alles synchron und konsistent ist keine Skalierung gut genug. Dann gibt es eine Tendenz zu mehr Sachen, die asynchrone und zu akzeptieren eventual consistency. Dies spiegelt sich in der Art und Weise Sprachen und Frameworks entworfen werden.
Viel inspiration ist gezeichnet von der funktionale Bereich, da passt es gut mit diesem Modus der Berechnung. Funktionale Programmierung hilft der Vernunft über was zu führen, anstatt wie und wenn.
Diese tatsächlich ergänzt der ansonsten traditionellen Mechanismus zum Umgang mit Parallelität.
Dies hängt davon ab, was du meinst. Sie nicht erforderlich, um low-level-Konstruktion wie die in
java.util.concurrent
. Aber ungleichzeitigkeiten ist, besser unterstützt und besser entlang der framework-stacks. Zum Beispiel, Servlet 3.0 führt asynchrone web-Anfrage zu erleichtern, die Entwicklung von AJAX Anwendungen. Als Folge, EJB 3.1 asynchrone Methodenaufruf zu integrieren mit dem asynchronen web-Schicht. An der Unterseite haben wir die low-level-Abstraktion von Funktion (oder zu delegieren, Verschluss), die abstracts der Berechnung selbst, und die nötigen Informationen für die Berechnung (Ihr Kontext). Ich denke, das gleiche gilt für .NET.Nicht mit der traditionellen web-Anwendung, sondern um das Internet als "Wolke" funktionale Programmierung unterstützt mit verteilte Berechnung auf mehreren CPU-Knoten und. Ein bekanntes Beispiel ist die "map/reduce" und dergleichen, die darauf abzielen, die Verarbeitung von großen Daten-set.
All das passt zusammen, und wir sehen eine web-Anwendung, die bleibt, reagieren, während die großen Menge von Daten werden asynchron verarbeitet.
Aber Nein, Sie wird nicht notwendig, müssen alle, die für einen traditionellen web-app!
Da web-apps sind gleichzeitige standardmäßig, Sie würden weniger wahrscheinlich sein, verwenden Sie die neuen concurrency-Mechanismen (z.B. TPL PLINQ oder für .NET) web-Anwendungen. In der Regel werden Sie nichts gewinnen, die auf einem web-server mit hoher Last (Sie beschleunigen würde, ein Antrag, durch Verlangsamung der anderen Anfrage). Allerdings, wenn Sie habe einen dedizierten web-server, der nicht dient, für die meisten von Ihrer CPU-Zyklen (während mit mehreren Kernen), jene Techniken die nützlich sein könnten.
[Update:]
Gerade gelesen, dass eine neue Artikel auf die Parallele Programmierung mit .NET-blog. Hier sind zwei interessante Zitate:
und:
Ich denke, das beantwortet Ihre Frage.
Ja, im high-performance-server und lange laufende Aufgaben
Check-out Async Controller in ASP.Net MVC
Stick zu deiner Frage ...
Dies ist genau der Teil, wo hintergrund-Parallelität (auf dem server) notwendig ist, manchmal, und vorzuziehen, ein Ajax-gespawnt web thread:
Sicher Parallelität Plattformen viel Sinn machen in web-apps. Schauen Sie sich nur SO (und die multi-tenancy-framework StackExchange) zum Beispiel gibt es viele Fälle, in denen das gleiche Objekt (Frage, Antwort, etc.) werden aktualisiert 'gleichzeitig'. Dies wäre eine große Berücksichtigung solcher software, die ich vorstellen möchte.
Über alle Parallelität in web-apps basiert auf einem multi-user experience. Oft ist es nur "ein Prozess pro Benutzer", mit dem gemeinsamen Nenner und möglicherweise eine Verbindung nur auf der Datenbank-Ebene, aber apps wie Flockdraw, usteream und andere, dass die Gruppe viele Benutzer gemeinsam und in Echtzeit, damit Sie miteinander verbunden und synchronisiert mehrere threads unter Last der abgesonderten Benutzer aber die Verknüpfung mit jedem anderen aktiv in der Echtzeit.
Meinem Verständnis, die Frage ergibt sich aus der Komplikation von zwei verschiedenen Implikationen des Begriffs Parallelität: der gleichzeitige service von einer Website auf der Benutzer-Anforderungen (makro-Ebene) vs. der gleichzeitigen Ausführung von zwei Programmen/Prozessen/threads (Mikro-Ebene).
Sie beide verwenden das gleiche Wort gleichzeitige, aber die erstere ist homogene, wenn wir einfach davon ausgehen, der server stellt nur ein service, und es gibt keine Interaktion/commonage zwischen der makro-Ebene Dienste für verschiedene Benutzer. Auch wenn die services für verschiedene Nutzer gehen, um die Daten-Speicher-Ebene und somit kämpfen für die IO-Ressourcen, das ist mehr ein problem der Mikro-Ebene: zwei Abfragen/schreibt Rennen Sie gegen einander für den gemeinsamen Ressourcen. Als eine Abstraktion der Dienste für die Nutzer sind immer homogen, daher Parallelität Funktionen/Bibliotheken zur Verfügung gestellt von Plattformen (du meinst Java, .Net, und etc. Ich denke mal) hat nichts zu tun mit web-apps, aber nur mit dem micro-Operationen, die weit unter Ihnen.