Stack-Less PythonのMicrothreadの利点は何ですか?
-
27-09-2019 - |
質問
LuaのCoroutineよりもスタックレスのPythonインプレンテーションの利点はありますか?それらの違いは何ですか?
解決
Stackless Pythonとタスクレット(スタックレスPythonでプログラミングを行ったことはありませんが、実装方法についての詳細のいくつかを読みました):
長所:
- ほとんどの場合、軽量。
- 現在の収穫後、次にどのタスクレットを履歴書を取得するかを管理するスケジューラがあります。
- 先制スケジューリングのサポート。 (すなわちx命令で実行されます)
- タスクレット間の通信のためのチャネル。
短所:
- タスクレットから降伏するときにCスタックが必要な場合があります。 (つまり、いくつかのCコールバックから降伏するとき)
プレーンコルーチンを備えたLua 5.1:
長所:
- 軽量。
- resume()/hiedd()関数により、消費者/生産者の通信モデルが可能になります。
短所:
- 内蔵スケジューラはありません。再開と屈服のコルーチンを管理する必要があります。
- C関数、メタメソッド、またはイテレーターから降伏することはできません。 (LUA 5.2はこれらの制限のほとんどを削除します。Luajit1.1は、どこからでも降伏するために軽量のCスタックスイッチングを提供します)
- 組み込みの先制スケジューリングサポートはありません。 (デバッグフックを使用する必要があります)
lua 5.1 with concurrentlua:
長所:
- 軽量。
- 協力的なコンテキストスイッチングを備えたスケジューラ。
- タスク間の通信を渡すメッセージのerlangスタイルがあります。
- ノード間で通過する透明な分散メッセージのサポート。
短所:
- C関数、メタメソッド、またはイテレーターから降伏することはできません。 (繰り返しますが、これらの制限のほとんどは、Lua 5.2とLuajitで行きます)
- 組み込みの先制スケジューリングサポートはありません。 (デバッグフックを使用する必要があります)
luajit 2.0ベータwith concurrentlua:
長所:
- 軽量。
- 協力的なコンテキストスイッチングを備えたスケジューラ。
- タスク間の通信を渡すメッセージのerlangスタイルがあります。
- ノード間で通過する透明な分散メッセージのサポート。
- 非常に高速なJITサポートが作成されます LuaはPythonよりもはるかに速い
短所:
- 現在、C関数から降伏できない可能性があります。これは、将来のリリースでサポートされる可能性があります。
- 組み込みの先制スケジューリングサポートはありません。 (デバッグフックを使用する必要があります)
所属していません StackOverflow