スタックレスPythonはマルチコアをうまく利用していなかったので、Pythonスレッド/マルチプロセッシングよりも高速である必要があるのはどこですか?
すべてのベンチマークは、スタックレスpythonタスクレットを使用してpythonスレッドのロックとキューと比較します。これは不公平です。ロックの効率は常に低いためです。
ロックなしでシングルスレッド関数呼び出しを使用する場合は、スタックレスPythonと同じくらい効率的である必要があります。
スタックレスPythonはマルチコアをうまく利用していなかったので、Pythonスレッド/マルチプロセッシングよりも高速である必要があるのはどこですか?
すべてのベンチマークは、スタックレスpythonタスクレットを使用してpythonスレッドのロックとキューと比較します。これは不公平です。ロックの効率は常に低いためです。
ロックなしでシングルスレッド関数呼び出しを使用する場合は、スタックレスPythonと同じくらい効率的である必要があります。
最初に機能に注目し、次にパフォーマンスに注目してください (必要があることがわかっている場合を除きます)。
サーバー上でのほとんどの時間は I/O に費やされるため、マルチコアはあまり役に立ちません。作業しているのが主に I/O である場合、マルチスレッド python が最も簡単な答えかもしれません。
サーバーのリクエストが CPU を集中的に使用する場合、親プロセス (マルチスレッドかどうかに関係なく) とそれぞれの子プロセスを持つことは、かなり理にかなっています。
本当にスケーリングしたい場合は、Erlang などの別のプラットフォームを検討できます。本当にスケーリングして Python を使用したい場合は、分散クラスターで Erlang ポートとして管理される Python プロセスを使用して分散型 erlang を検討できます。
多くのオプションがありますが、大きなものを扱っていない限り、おそらく単純なアプローチを取ることができます.
早期にリリースし、頻繁にリリースします。
非同期 IO ループ、メッセージ パッシング コンカレンシー、およびその他のいくつかのトレンディな用語と呼ばれる、この新しいトレンディなものがあります。まあ、それはまったく新しいものではありませんが、メインストリームによって発見されたのはこの 5 年間だけです。
スタックレス Python は Python のバージョンであり、VM 自体がこれらのメッセージ パッシングと IO ループをより適切にサポートするように変更されており、そのトリックはグリーン スレッド/コルーチンです。
Python の Twisted や Tornado など、さまざまなツールで同じことを行うためのライブラリが他にもあります。Stackless Python などでハイブリッド Twisted を実行することもできます。
IO ループ ビットは、バークレー ソケットが非同期 IO を行う方法に直接マップされます。少し努力すれば、反応的ではなく積極的に拡張し、ファイル システムやネットワーク ソケット (最新の libevent など) で動作するように拡張できます。
複数のコアを利用するために横方向にスケーリングするには、マルチスレッドという 2 つのアプローチがあります。スレッド間またはプロセス間の共有状態 -メッセージキューなどのマルチプロセッシング。現在のアーキテクチャの一般的な制限は、スレッド アプローチが多数のコアに対してローカルで適切に機能することです。一方、メッセージ パッシングは、コアの数が膨大になるか、それらのコアが異なるマシン上にある場合にパフォーマンスの面で追い越されます。そして、ハイブリッドなアプローチを行うことができます。
Python VM の内部設計の選択により、通常、マルチスレッドではマルチプロセッシングほど効率的ではないため、他のプラットフォームよりも早くメッセージ パッシングを使用して複数のプロセスに移行します。
しかし、一般的に、メッセージ パッシング アプローチは、よりクリーンで簡単に正しいバージョンです。
また、Erlang、node.js、Clojure、Go など、異なる目的と制約を追加して、この同じアプローチに基づいて構築された他の言語があります。
これらの中で、Clojure はおそらく最も有益です。Clojure がどのように動作するかを理解し、その理由を考えてみると、他のシステムの目的と制約全体が適切に配置されます...