4

Lua のコルーチンよりもスタックレスの Python 実装に利点はありますか? それらの違いは何ですか?

4

1 に答える 1

9

スタックレス python とタスクレット (スタックレス python でプログラミングを行ったことはありませんが、実装方法に関する詳細をいくつか読んだことがあります):

長所:

  1. たいてい軽い。
  2. 現在のタスクレットが解放された後、次にどのタスクレットが再開されるかを管理するスケジューラーがあります。
  3. プリエンプティブ スケジューリングのサポート。(つまり、X 命令に対して実行)
  4. タスクレット間の通信用チャネル。

短所:

  1. タスクレットから譲歩するときに C スタックが必要になることがあります。(つまり、一部の C コールバックから生成される場合)

プレーンなコルーチンを使用した Lua 5.1:

長所:

  1. 軽量。
  2. resume()/yield() 関数により、消費者/生産者モデルの通信が可能になります。

短所:

  1. 組み込みのスケジューラーはありません。コルーチンの再開と譲渡を管理する必要があります。
  2. C 関数、メタメソッド、または反復子から生成できません。(Lua 5.2 では、これらの制限のほとんどが取り除かれます。LuaJIT 1.1 では、どこからでも生成できる軽量の c-stack スイッチングが提供されます)
  3. 組み込みのプリエンプティブ スケジューリング サポートはありません。(デバッグフックを使用する必要があります)

ConcurrentLuaを使用した Lua 5.1 :

長所:

  1. 軽量。
  2. 協調的なコンテキスト切り替えを備えたスケジューラ。
  3. タスク間のメッセージ パッシング通信の Erlang スタイルがあります。
  4. ノード間の透過的な分散メッセージ パッシングのサポート。

短所:

  1. C 関数、メタメソッド、または反復子から生成できません。(これらの制限のほとんどは、Lua 5.2 と LuaJIT で解消されます)
  2. 組み込みのプリエンプティブ スケジューリング サポートはありません。(デバッグフックを使用する必要があります)

ConcurrentLuaを使用した LuaJIT 2.0 ベータ版:

長所:

  1. 軽量。
  2. 協調的なコンテキスト切り替えを備えたスケジューラ。
  3. タスク間のメッセージ パッシング通信の Erlang スタイルがあります。
  4. ノード間の透過的な分散メッセージ パッシングのサポート。
  5. 非常に高速な JIT サポートにより、Lua は Python よりもはるかに高速になります

短所:

  1. 現在、C 関数から生成できない可能性があります。これは、将来のリリースでサポートされる可能性があります。
  2. 組み込みのプリエンプティブ スケジューリング サポートはありません。(デバッグフックを使用する必要があります)
于 2010-11-04T12:55:04.967 に答える