2016-03-22 9 views
6

A Tarantool, le fibre sono utilizzate quando l'autore del codice Lua vuole che Tarantool pianifichi l'esecuzione? Le co-routine (nel processo Tarantool/LuaJIT) sono usate quando l'autore del codice Lua vuole avere il controllo dell'esecuzione?Quando usare le fibre e quando usare le co-routine in Tarantool?

+2

Nel Tarantoolo, le fibre sono sinonimo di coroutine. Ti consigliamo di usare sempre le nostre fibre, piuttosto che le coroutine Lua, poiché sono più potenti. Il nostro intero stack I/O è integrato con loro: socket, file, net.box, mysql, postgresql, ecc. – Kostja

+1

Ci sono alcune attività che potrebbero essere utilizzate per le coroutine, come gli iteratori. È perfettamente valido utilizzare contemporaneamente coroutine e fibre, ma ciò potrebbe causare confusione. La resa in coroutine può fallire con un infame tentativo di cedere attraverso il confine C-call, mentre le fibre lavorano in questa situazione. –

risposta

6

Nel Tarantoolo, le fibre sono sinonimo di coroutine. Le fibre sono più integrate con I/O Tarantool ecc., Dovresti usarle al posto delle coroutine lua. Ti consigliamo di usare sempre le nostre fibre, piuttosto che le coroutine Lua, poiché sono più potenti. Il nostro intero stack di I/O è integrato con loro: prese di corrente, i file, net.box, MySQL, PostgreSQL, ecc

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

Ci sono alcuni compiti che coroutine potrebbe essere utilizzato per, come iteratori. È perfettamente valido utilizzare contemporaneamente coroutine e fibre, ma ciò potrebbe causare confusione. La resa di Coroutine può fallire con un famigerato attempt to yield across C-call boundary, mentre le fibre funzionano in questa situazione.

+0

Grazie per la rapida risposta. –

+0

Ci sono altri effetti collaterali negativi a cui prestare attenzione? – aleclarson

3

La pila di fibre è più grande di una di una coroutine. È mmapp'ed a 64 KB, ed è almeno una pagina del sistema operativo (in genere 4 KB). Il cambio di contesto in fibra comporta un overhead aggiuntivo, poiché nasconde/ripristina i registri oltre a nascondere/ripristinare la coroutine. Gli interruttori di contesto in fibra ottica interrompono il JIT in LuaJIT, poiché LuaJIT non è in grado di nascondere/ripristinare l'esecuzione tracciata. A differenza delle coroutine, le fibre funzionano bene con tutti gli IO non bloccanti che sono incorporati nel server delle applicazioni: quando una fibra produce implicitamente una chiamata IO, un'altra fibra entra in azione. Ma non un'altra coroutine, ovviamente, dovrai prenderti cura di questo te stesso se li stai usando.

Problemi correlati