質問

LuaのCoroutineよりもスタックレスのPythonインプレンテーションの利点はありますか?それらの違いは何ですか?

役に立ちましたか?

解決

Stackless Pythonとタスクレット(スタックレスPythonでプログラミングを行ったことはありませんが、実装方法についての詳細のいくつかを読みました):

長所:

  1. ほとんどの場合、軽量。
  2. 現在の収穫後、次にどのタスクレットを履歴書を取得するかを管理するスケジューラがあります。
  3. 先制スケジューリングのサポート。 (すなわちx命令で実行されます)
  4. タスクレット間の通信のためのチャネル。

短所:

  1. タスクレットから降伏するときにCスタックが必要な場合があります。 (つまり、いくつかのCコールバックから降伏するとき)

プレーンコルーチンを備えたLua 5.1:

長所:

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

短所:

  1. 内蔵スケジューラはありません。再開と屈服のコルーチンを管理する必要があります。
  2. C関数、メタメソッド、またはイテレーターから降伏することはできません。 (LUA 5.2はこれらの制限のほとんどを削除します。Luajit1.1は、どこからでも降伏するために軽量のCスタックスイッチングを提供します)
  3. 組み込みの先制スケジューリングサポートはありません。 (デバッグフックを使用する必要があります)

lua 5.1 with concurrentlua:

長所:

  1. 軽量。
  2. 協力的なコンテキストスイッチングを備えたスケジューラ。
  3. タスク間の通信を渡すメッセージのerlangスタイルがあります。
  4. ノード間で通過する透明な分散メッセージのサポート。

短所:

  1. C関数、メタメソッド、またはイテレーターから降伏することはできません。 (繰り返しますが、これらの制限のほとんどは、Lua 5.2とLuajitで行きます)
  2. 組み込みの先制スケジューリングサポートはありません。 (デバッグフックを使用する必要があります)

luajit 2.0ベータwith concurrentlua:

長所:

  1. 軽量。
  2. 協力的なコンテキストスイッチングを備えたスケジューラ。
  3. タスク間の通信を渡すメッセージのerlangスタイルがあります。
  4. ノード間で通過する透明な分散メッセージのサポート。
  5. 非常に高速なJITサポートが作成されます LuaはPythonよりもはるかに速い

短所:

  1. 現在、C関数から降伏できない可能性があります。これは、将来のリリースでサポートされる可能性があります。
  2. 組み込みの先制スケジューリングサポートはありません。 (デバッグフックを使用する必要があります)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top