2016-03-22 11 views
6

Tarantoolでは、Luaコードの作成者がTarantoolの実行をスケジュールしたいときに、ファイバーを使用していますか? Luaコードの作成者が実行を制御したいときに使用されるコルーチン(Tarantool/LuaJITプロセス内)は使用されていますか?繊維を使用する時期とTarantoolでコルーチンを使用する時期は?

+2

Tarantoolでは、ファイバはコルーチンと同義です。ルアコルーチンよりも、私たちのファイバーは、より強力なので、常にファイバーを使用することをお勧めします。ソケット、ファイル、net.box、mysql、postgresqlなど、I/Oスタック全体が統合されています。 – Kostja

+1

イテレータのようにコルーチンを使用できるタスクがいくつかあります。コルーチンとファイバの両方を同時に使用することは完全に有効ですが、混乱を招く可能性があります。コルーチンの歩留まりは、有害な「Cコール境界を越えて降伏しようとする」試みに失敗し、ファイバはこの状況で動作する。 –

答えて

6

Tarantoolでは、ファイバはコルーチンと同義です。ファイアウォールはTarantool I/Oなどに統合されていますので、luaコルーチンの代わりに使用してください。ルアコルーチンよりも、私たちのファイバーは、より強力なので、常にファイバーを使用することをお勧めします。私たちの全体のI/Oスタックは、それらと統合されています。ソケット、ファイル、net.box、mysqlの、のpostgresqlなどのドキュメントへ

リンク:http://tarantool.org/doc/reference/fiber.html

コルーチンをするために使用することができ、いくつかのタスク、などがあります。イテレータ。コルーチンとファイバの両方を同時に使用することは完全に有効ですが、混乱を招く可能性があります。コルーチンの歩留まりは、悪質なattempt to yield across C-call boundaryで失敗する可能性がありますが、この状況ではファイバは機能します。

+0

迅速な返信をありがとう。 –

+0

他の負の副作用がありますか? – aleclarson

3

ファイバスタックは、コルーチンの1つよりも大きい。これは64KBにmmappされ、少なくとも1つのOSページ(通常は4KB)です。ファイバー・コンテキスト・スイッチングは、コルーチンを隠す/復元するだけでなく、レジスターを隠す/リストアするため、余分なオーバーヘッドを招きます。ファイバコンテキストスイッチは、LuaJITがトレースされた実行を非表示/復元できないため、LuaJITのJITを中断します。コルーチンとは異なり、ファイバはアプリケーションサーバーに組み込まれているすべてのノンブロッキングIOでうまく機能します.IOコールでファイバが暗黙に発生すると、別のファイバが起動します。ただし、別のコルーチンはもちろんありませんあなたがそれらを使用しているならば、あなた自身のこと。

関連する問題