問題タブ [green-threads]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
182 参照

python - スタックレス Python - 単一のタスクレットの実行時間をプロファイルする

スタックレス Python で記述された私のサーバーでは、CPU 使用率が 5 ~ 10 秒間急上昇することがあります。これは散発的に発生するため、追跡するのに苦労しています。

私は cProfile を使用してこれらのスパイクがどこから来ているかを特定しようとしましたが、cProfile は関数ごとにどこで時間が費やされているかの全体像を示します。私が本当に知りたいのは、CPU スパイクが単一のタスクレットで発生する何らかの処理 (および他のタスクレットの停止) によるものなのか、それとも多くの処理を実行している複数のタスクレットがあるのか​​ (つまり、それぞれがアクティブになるにつれて、それぞれが実行されているかどうか) です。多くの作業)。

タイミング コードを追加できるように、Stackless Python のスケジューラにフックする便利な方法はありますか? つまり、タスクレットがアクティブになったときと非アクティブになったときに呼び出される、フックできる関数はありますか?

0 投票する
3 に答える
730 参照

java - Java のユーザーレベルスレッドが「グリーン」と呼ばれるのはなぜですか?

重複の可能性:
グリーン スレッドと非グリーン スレッド

JVM のユーザーレベルで実装された Java スレッドが「グリーンスレッド」と呼ばれるのはなぜですか? それは、OS スレッドよりも無駄が少ないことを示唆することを意味する環境保護主義との類推によるものですか、それとも何か他のものですか?

編集:用語が使用されている場所へのいくつかの参照:

0 投票する
2 に答える
2110 参照

python - 1 つの Python プロセスでグリーン スレッドとネイティブ スレッドを混在させても安全ですか?

まず、eventlet や gevent などのグリーン スレッドを、標準ライブラリの python ネイティブ スレッド、つまり Lib/threading.py を同じ python プロセスに混在させても安全ですか?

第二に、もしそれが安全なら、それは悪い考えですか?

0 投票する
2 に答える
2767 参照

python - グリーンレットの問題をブロックしていますか?

イベント ループ (NodeJS など) に関しては、ブロック コードが罪であることは理解していますが、グリーンレット (グリーン スレッドであると私は信じています) の場合はどうでしょうか? ブロッキング関数を呼び出すコードの実行に問題はありますか?

0 投票する
1 に答える
281 参照

java - JNIを介してUNIXucontextライブラリを使用するJavaグリーンスレッド。出来ますか?

私は、ucontextを使用して、グリーン(協調的)量子ベースのスレッドの簡単で教育的な例を開発しています。しかし、私は問題に直面しています。以下に示す例は、非常に簡単に理解できます。私に提供できる支援に感謝します。

TestApp.java

UThreadApp.java

UThreadApp.c

コードは、メソッドを作成kernelしてmainコンテキスト化しumain、新しいユーザースレッドとして準備します。swapコンテキストを切り替え、カーネルを保存し、メインを実行します。例を印刷する必要があります:

umain

そして次

主要

ただし、でJavaコールバックを実行するとsegfaultsが発生します(*env)->CallStaticVoidMethod(env, cls, mid)。この種のコードはCでプログラミングするのは簡単ですが、Javaで開発しようとすると、微妙な問題に直面します。

javaflow(SIGALRMを使用して)時間クォンタムを備えたスケジューラーを開発することは非常に難しいと思うので、Apacheはオプションではありません。

何かご意見は?

0 投票する
2 に答える
25333 参照

python - グリーンスレッドとPythonのスレッド

ウィキペディアが述べているように:

グリーンスレッドは、ネイティブOS機能に依存せずにマルチスレッド環境をエミュレートし、カーネルスペースではなくユーザースペースで管理されるため、ネイティブスレッドがサポートされていない環境で動作できます。

Pythonのスレッドはとして実装されpthreads (kernel threads)、グローバルインタープリターロック(GIL)のため、Pythonプロセスは一度に1つのスレッドのみを実行します。

[質問]しかしGreen-threads(またはいわゆるグリーンレットまたはタスクレット)の場合、

  1. それらにGIL影響を与えますか?一度に複数のグリーンレットを実行できますか?
  2. グリーンレットまたはタスクレットを使用する際の落とし穴は何ですか?
  3. グリーンレットを使用する場合、プロセスで処理できるグリーンレットはいくつですか?(1つのプロセスで、* ixシステムに設定されているulimit-s-v )までのスレッドを開くことができるので疑問に思い ます。)

私は少し洞察が必要です、そして誰かが彼らの経験を共有するか、正しい道に私を導くことができればそれは助けになるでしょう。

0 投票する
1 に答える
1960 参照

python - eventlet.GreenPool.spawnを使用しているときに、メインスレッドで例外を発生させるにはどうすればよいですか?

eventlet.GreenPool.spawnを使用していくつかのタスクを実行し、すべてのgreanthreadsが終了するのを待ちます。例外が発生することはわかっています-その例外をキャッチしてメインスレッドにスローするにはどうすればよいですか?簡単だと思いますが、何かが足りません。

これが例です(失敗し、成功したいです)

そしてそれは出力です:

0 投票する
3 に答える
4988 参照

python - `eventlet.spawn`が期待どおりに機能しない

データ分析タスク用のWebUIを作成しています。

これが機能することになっている方法です:

datasetユーザーがandなどのパラメーターを指定した後learning rate、新しいを作成すると、task recordこのタスクのエグゼキューターが非同期で開始され(エグゼキューターの実行に時間がかかる場合があります)、ユーザーは別のページにリダイレクトされます。

を検索した後async library for python、私はから始めました。これがビュー関数eventletで書いたものです。flask

上記のコードでは、エグゼキュータはまったく実行されませんでした。

私のコードの問題は何でしょうか?それとも私は何か他のものを試すべきですか?

0 投票する
3 に答える
7110 参照

c - Haskell のグリーン スレッドのパフォーマンスと使いやすさに匹敵する C 用のグリーン スレッド ライブラリはどれですか?

私はforkIOHaskell でプログラミングするとき、移植可能な軽量スレッドを GHC に依存することに慣れています。

同じスケーラビリティと使いやすさを提供できる C の同等のライブラリは何ですか?

具体的には、少なくとも次の 2 つの関数の C 版が必要です。

splice私のアプリケーションでは、すべてのスレッドがネットワーク IO のために非常に頻繁にブロックされ、システム コールを使用して Linux カーネルにソケット間でデータをプッシュするように要求するだけなので、スレッドが強制的に中断されるのではなく、ブロッキング操作をオンにするだけで十分だと思います。


アップデート

この論文には、比較する図と表があります

Protothreads に有利な結果が得られました。私は何も使用したことがなく、他のライブラリもあるかもしれないので、そのようなライブラリを使用/開発したことがある人からの連絡をお待ちしています.

0 投票する
1 に答える
296 参照

pthreads - 同期ブロッキング共有メモリモデルコードをスレッドプールで実行されている非同期コルーチンに変換するにはどうすればよいですか?

私の質問に部分的に一致する解決策はたくさんありますが、完全に一致するものが存在するかどうかを知りたいです。これらの部分的な解決策が検索結果を占めるため、完全な解決策を見つけるのは困難です。これはランタイムフレームワークであり、(オプションで)言語がコルーチンをサポートしていない場合に言語コードをソースするために必要な変換である必要があります。

lthread_cond_wait()APIを持つlthreadのようなライブラリがありますが、すべてのlthreadは単一のpthreadによって制限されます。軽量スレッドを複数のpthreadで実行できるようにしたいと思います。それらはスレッドプールによって任意に選択される必要があります。シングルスレッドスケジューラまたはグローバルロックスケジューラのいずれかが一致しません。私たちはもっとうまくやれると思います。

lthreadsは、ソースコードの変換を伴わず、プロトスレッドのように回避しないため、オプションではありません。

いくつかのグリーンスレッドランタイム(Erlang、Limbo)は、CSP(シーケンシャルプロセスの通信)モデルのみに制限されているため一致しませんが、共有メモリモデル同期プリミティブ(ミューテックス、条件変数、rwlocks)も必要です。

変革には以下が含まれます:

  1. スタックコンテキストをヒープ内のオブジェクトに変換する
  2. ミューテックス呼び出しを、スレッドプールとパブリッシュ/サブスクライブでのジョブの無効化とアクティブ化の操作に変換します
  3. 条件変数もパブリッシュ/サブスクライブリアルシップに変換する必要があります
  4. エイダスタイルのランデブーがあればいいのに

グローバルロックまたは単一のスケジューラスレッドを使用せずにパブリッシュ/サブスクライブメカニズムでデッドロックが発生する可能性があるため、単純なランタイム実装を実行できませんでしたが、それでも可能だと思います。