2013-07-31 23 views
5

Im documentation ich folgendes sehen:Flasche und Skalierung und Gleichzeitigkeit

Es gibt nur ein limitierender Faktor in Flask hinsichtlich Skalierung, die der Kontext lokalen Proxies sind. Sie hängen vom Kontext ab, der in Flask entweder als Thread, Prozess oder Greenlet definiert ist. Wenn Ihr Server eine Art Parallelität verwendet, die nicht auf Threads oder Greenlets basiert, kann Flask diese globalen -Proxies nicht mehr unterstützen. Allerdings verwendet die Mehrheit der Server entweder Threads, Greenlets oder separate Prozesse, um Parallelität zu erreichen, die alle Methoden von der zugrunde liegenden Bibliothek Werkzeug unterstützt werden.

Meine Frage: Welche anderen gleichzeitigen Mechanismen gibt es außer diesen 3 Methoden?

Antwort

2

Ein ziemlich interessanter Nebenläufigkeitsmechanismus ist das asynchrone Modell. Sie haben einen einzelnen Prozess mit einem einzelnen Thread, der die gesamte Show ausführt, wobei alle E/A- oder andere langwierige Aufgaben asynchron und callbackbasiert sind. Diese Methode skaliert sehr gut für E/A-gebundene Dienste, Server in dieser Kategorie können problemlos das C10K Problem behandeln.

Beispiele siehe Tornado oder node.js.

+0

Das wird im Grunde von Greenlet abgedeckt. – Jahaja

+0

@Jahaja: Nein. Greenlet basierte Webserver sind eine Sache, asynchrone (ereignisgesteuerte) Webserver wie Tornado sind eine andere Sache. Beide erreichen ein ähnliches Ziel höherer Gleichzeitigkeit, aber sie kommen mit verschiedenen Methoden dorthin. Insbesondere kann Flask oben auf einem Greenlet-basierten Webserver arbeiten, aber es wird sich nicht leicht an einen asynchronen Server anpassen. – Miguel

+0

Mein Punkt ist, dass beide Lösungen verwenden, was Sie in den unteren Schichten beschreiben. Gevent verwendet libevent/libev und node.js mit libuv. (Denken Sie daran, irgendwo zu lesen, dass gevent 2.0, falls es veröffentlicht wurde, auf libuv basieren könnte.) – Jahaja