Frage

stackless Python eine gute Nutzung von Multi-Core nicht nehmen, also wo ist der Punkt, es schneller als Python-Thread / Multiprozessing sein sollte?

der Benchmark Verwendung Stackless Tasklet Python mit Python Gewindesicherung und Warteschlange zu vergleichen, das ist unfair, Ursache Sperre immer geringe Effizienz besitzt

sehen, wenn die Verwendung einzelner Thread Funktionsaufruf ohne sperren sollte es so effizient wie stackless Python sein

War es hilfreich?

Lösung

auf Funktionalität Fokus ersten und Leistung Sekunde (es sei denn, Sie wissen, dass Sie die Notwendigkeit haben).

Die meiste Zeit auf einem Server mit verbringt ich / O, so Multi-Kern so viel nicht helfen. Wenn es meist I / O, die Sie arbeiten mit, kann Multi-Threading Python die einfachste Antwort sein.

Wenn die Serveranforderungen CPU-intensiv sind, dann einen übergeordneten Prozess mit (wäre es mit mehreren Threads oder nicht), und die jeweiligen untergeordnete Prozesse ein gutes Stück Sinne machen.

Wenn Sie wirklich skalieren möchten, können Sie auf einer anderen Plattform, wie Erlang aussehen könnte. Wenn Sie wirklich skalieren möchten und noch Python verwenden, können Sie an verteilten erlang mit Python-Prozesse verwaltet wie Erlang-Ports auf einem verteilten Cluster aussehen könnte.

Es gibt viele Möglichkeiten, aber wenn man mit some handelt big big , könnten Sie am ehesten einen einfachen Ansatz.

Freigabe früh, Release oft.

Andere Tipps

Es ist diese neue und trendige Sache asynchron-IO-Loops und Message-Passing-Concurrency und ein paar andere modischen Begriffe genannt. Nun, es ist nicht neu, aber es ist gerade erst in die letzten 5 Jahren von dem Mainstream entdeckt zu werden.

Stackless Python ist eine Version von Python, wo die VM selbst besser modifiziert wurde, um diese Nachricht zu unterstützen vorbei und IO Schleifen und sein Trick ist grün Einfädeln / Koroutinen.

Es gibt andere Bibliotheken mit unterschiedlichen Werkzeugen das gleiche zu tun, zum Beispiel Verdrehte und Tornado, auf Python. Sie können sogar hybrid Verdrehte auf Stackless Python laufen und so weiter.

Die Bit-IO-Schleife ordnet direkt an, wie Berkley Sockets tun asynchrone IO, und mit ein wenig Aufwand kann erweitert werden, proaktiv zu sein, anstatt reaktiv und mit Dateisystemen sowie Netzwerk-Sockets arbeiten, z.B. die neueste libevent.

zur Seite skalieren mehr zu nutzen als ein Kern ist, wo man zwei Ansätze hat - Multithreading ; gemeinsam genutzten Zustand z.B. Gewinde oder zwischen Prozessen - Multiprozessing z.B. Nachrichtenwarteschlangen. Es ist eine allgemeine Begrenzung der aktuellen Architekturen, die die Fäden Ansatz auch für eine große Anzahl von Kernen vor Ort arbeitet, während Message Passing leistungsmäßig überholt wie die Anzahl der Kerne massiv wird oder wenn diese Kerne auf verschiedenen Maschinen sind. Und Sie können einen hybriden Ansatz machen.

Aufgrund der internen Design-Entscheidungen in dem Python-VM, es ist in der Regel nicht so effizient bei Multi-Threading als Multi-Processing, so dass Sie mehrere Prozesse mit Meldung gehen vorbei früher als Sie vielleicht auf anderen Plattformen.

Aber im Allgemeinen die Nachricht Ansatz vorbei ist ein sauberer, leicht richtig Version.

Und es gibt auch andere Sprachen, die zum Beispiel mit verschiedenen zusätzlichen Zielen und Zwängen auf den gleichen Ansatz bauen Erlang, node.js, Clojure, gehen.

Von diesen ist Clojure vielleicht die informativ. Wenn Sie verstehen, wie Clojure Zecken und denken über die whys , werden die gesamten Ziele und Zwänge der anderen Systeme ins Lot zu kommen ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top