[解決済み] グリーンレットVSスレッド
質問
私はgeventsとgreenletsの初心者です。しかし、いつ、どのようにグリーンレッツを使うべきか、正当な理由を教えてくれるものはありませんでした。
- それらは本当に何が得意なのですか?
- プロキシサーバで使用するのは良いアイデアですか、そうではありませんか?
- なぜスレッドではないのですか?
私がよくわからないのは、基本的に共同ルーチンである場合、それらがどのように私たちに並行性を提供することができるのかということです。
どのように解決するのですか?
グリーンレットは並行処理を提供しますが ではなく 並列性ではありません。同時実行とは、コードが他のコードから独立して実行できることです。並行処理とは、同時進行するコードを同時に実行することです。並列処理は、ユーザー空間で多くの作業を行う場合に特に有効で、通常は CPU の負荷が高くなります。並行処理は、問題を分解し、異なる部分をより簡単に並行してスケジュールおよび管理できるようにするのに便利です。
グリーンレットは、1つのソケットとのインタラクションが他のソケットとのインタラクションから独立して発生することができるネットワークプログラミングで本当に輝きます。これは並行処理の典型的な例です。各グリーンレットはそれ自身のコンテキストで実行されるので、スレッドなしで同期APIを使用し続けることができます。スレッドは仮想メモリとカーネルオーバーヘッドの点で非常に高価なので、スレッドで実現できる同時実行性は著しく低いので、これは良いことです。さらに、PythonのスレッドはGILのために通常よりも高価で、より制限されています。同時実行の代替案は通常、Twisted、libevent、libuv、node.js などのプロジェクトで、すべてのコードが同じ実行コンテキストを共有し、イベントハンドラを登録するようなものです。
リクエストの処理は独立して実行することができ、そのように書かれるべきなので、プロキシを書くためにグリーンレット(geventのような適切なネットワークサポート付き)を使用することは素晴らしいアイデアです。
グリーンレットは、私が先にあげた理由で並行処理を提供します。並行処理とは、並列処理ではありません。イベント登録を隠し、通常は現在のスレッドをブロックする呼び出しであなたのためにスケジューリングを実行することによって、gevent のようなプロジェクトは、非同期 API への変更を必要とせず、システムに対してかなり少ないコストでこの同時実行性を公開します。
関連
-
opencvとpillowを用いた顔認証システム(デモあり)
-
パッケージングツールPyinstallerの使用と落とし穴の回避
-
Python 入出力と高次代入の基礎知識
-
[解決済み】「SyntaxError.Syntax」は何ですか?Missing parentheses in call to 'print'」はPythonでどういう意味ですか?
-
[解決済み】django インポートエラー - core.managementという名前のモジュールがない
-
[解決済み] 最近のPythonでカスタム例外を宣言する適切な方法?
-
[解決済み】djangoのビジネスロジックとデータアクセスの分離
-
[解決済み】データクラスとは何ですか、一般的なクラスとどう違うのですか?
-
[解決済み】CNTLMでプロキシの背後でpipを使用する場合
-
[解決済み】Node.jsは内部でThreadsに依存しているのに、どうして本質的に高速なのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Python関数の高度な応用を解説
-
Python百行で韓服サークルの画像クロールを実現する
-
風力制御におけるKS原理を深く理解するためのpythonアルゴリズム
-
Pythonショートビデオクローラーチュートリアル
-
Python Pillow Image.save jpg画像圧縮問題
-
[解決済み】「RuntimeError: dictionary changed size during iteration」エラーを回避する方法とは?
-
[解決済み] データ型が理解できない
-
[解決済み】Python elifの構文が無効です【終了しました
-
[解決済み】IndexError: invalid index to scalar variableを修正する方法
-
[解決済み】NameError: 名前 'self' が定義されていません。