Lua のコルーチンよりもスタックレスの Python 実装に利点はありますか? それらの違いは何ですか?
1937 次
1 に答える
9
スタックレス python とタスクレット (スタックレス python でプログラミングを行ったことはありませんが、実装方法に関する詳細をいくつか読んだことがあります):
長所:
- たいてい軽い。
- 現在のタスクレットが解放された後、次にどのタスクレットが再開されるかを管理するスケジューラーがあります。
- プリエンプティブ スケジューリングのサポート。(つまり、X 命令に対して実行)
- タスクレット間の通信用チャネル。
短所:
- タスクレットから譲歩するときに C スタックが必要になることがあります。(つまり、一部の C コールバックから生成される場合)
プレーンなコルーチンを使用した Lua 5.1:
長所:
- 軽量。
- resume()/yield() 関数により、消費者/生産者モデルの通信が可能になります。
短所:
- 組み込みのスケジューラーはありません。コルーチンの再開と譲渡を管理する必要があります。
- C 関数、メタメソッド、または反復子から生成できません。(Lua 5.2 では、これらの制限のほとんどが取り除かれます。LuaJIT 1.1 では、どこからでも生成できる軽量の c-stack スイッチングが提供されます)
- 組み込みのプリエンプティブ スケジューリング サポートはありません。(デバッグフックを使用する必要があります)
ConcurrentLuaを使用した Lua 5.1 :
長所:
- 軽量。
- 協調的なコンテキスト切り替えを備えたスケジューラ。
- タスク間のメッセージ パッシング通信の Erlang スタイルがあります。
- ノード間の透過的な分散メッセージ パッシングのサポート。
短所:
- C 関数、メタメソッド、または反復子から生成できません。(これらの制限のほとんどは、Lua 5.2 と LuaJIT で解消されます)
- 組み込みのプリエンプティブ スケジューリング サポートはありません。(デバッグフックを使用する必要があります)
ConcurrentLuaを使用した LuaJIT 2.0 ベータ版:
長所:
- 軽量。
- 協調的なコンテキスト切り替えを備えたスケジューラ。
- タスク間のメッセージ パッシング通信の Erlang スタイルがあります。
- ノード間の透過的な分散メッセージ パッシングのサポート。
- 非常に高速な JIT サポートにより、Lua は Python よりもはるかに高速になります
短所:
- 現在、C 関数から生成できない可能性があります。これは、将来のリリースでサポートされる可能性があります。
- 組み込みのプリエンプティブ スケジューリング サポートはありません。(デバッグフックを使用する必要があります)
于 2010-11-04T12:55:04.967 に答える