2016-03-22 7 views
6

Werden in Tarantool Fasern verwendet, wenn der Lua-Code-Autor möchte, dass Tarantool die Ausführung einplant? Werden Co-Routinen (im Tarantool/LuaJIT-Prozess) verwendet, wenn der Autor des Lua-Codes die Ausführung kontrollieren will?Wann man Fasern benutzt und wann man Co-Routinen in Tarantool benutzt?

+2

In Tarantool sind Fasern gleichbedeutend mit Korotinen. Wir schlagen vor, dass Sie immer unsere Fasern anstelle von Lua-Korotinen verwenden, da diese leistungsfähiger sind. Unser gesamter E/A-Stack ist in sie integriert: Sockets, Dateien, net.box, mysql, postgresql usw. – Kostja

+1

Es gibt einige Aufgaben, für die Korotinen verwendet werden können, wie Iteratoren. Es ist durchaus zulässig, Korotinen und Fasern gleichzeitig zu verwenden, was jedoch zu Verwirrung führen kann. Die routinemäßige Ausbeute kann mit einem berüchtigten "Versuch, über die C-Call-Grenze hinwegzukommen" versagen, während Fasern in dieser Situation funktionieren. –

Antwort

6

In Tarantool sind Fasern gleichbedeutend mit Korotinen. Die Fasern sind in Tarantool I/O usw. integriert, Sie sollten sie anstelle von Lua-Coroutinen verwenden. Wir schlagen vor, dass Sie immer unsere Fasern anstelle von Lua-Korotinen verwenden, da diese leistungsfähiger sind. Unsere gesamte I/O Stack wird mit ihnen integriert: Steckdosen, Dateien, net.box, MySQL, PostgreSQL usw.

Link zu docs: http://tarantool.org/doc/reference/fiber.html

Es gibt einige Aufgaben, die Koroutinen für verwendet werden könnte, wie Iteratoren. Es ist durchaus zulässig, Korotinen und Fasern gleichzeitig zu verwenden, was jedoch zu Verwirrung führen kann. Bei einer berüchtigten attempt to yield across C-call boundary kann die routinemäßige Ausbeute scheitern, während Fasern in dieser Situation funktionieren.

+0

Danke für die schnelle Antwort. –

+0

Gibt es noch andere negative Nebenwirkungen, auf die Sie achten sollten? – aleclarson

3

Faserstapel ist größer als einer einer Coroutine. Es ist auf 64KB gemapped und ist mindestens eine OS-Seite (4KB normalerweise). Die Umschaltung von Faserkontexten verursacht zusätzlichen Overhead, da sie zusätzlich zum Ausblenden/Wiederherstellen der Coroutine Register versteckt/wiederherstellt. Faserkontextschalter brechen JIT in LuaJIT, da LuaJIT die verfolgte Ausführung nicht ausblenden/wiederherstellen kann. Im Gegensatz zu Coroutinen funktionieren Fasern gut mit allen nicht blockierenden IO, die in den Anwendungsserver eingebaut sind: Wenn eine Faser implizit bei einem IO-Aufruf nachgibt, setzt eine andere Faser ein. Aber keine andere Coroutine, natürlich müssen Sie aufpassen davon selbst, wenn Sie sie verwenden.