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?
risposta
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.
Grazie per la rapida risposta. –
Ci sono altri effetti collaterali negativi a cui prestare attenzione? – aleclarson
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.
- 1. Quando usare viewDidLoad e quando usare awakeFromNib
- 2. Quando usare node.js e quando usare ajax?
- 3. quando usare Task e quando usare Thread?
- 4. Quando usare undef_method e quando usare remove_method?
- 5. Quando usare Requirejs e quando usare javascript in bundle?
- 6. Quando usare richiede e quando usare l'importazione in Aurelia?
- 7. Quando usare dup e quando usare clone in Ruby?
- 8. Quando non dovrei usare le espressioni regolari?
- 9. Quando dovrei usare require() e quando usare define()?
- 10. Quando usare "se" e "quando" in Clojure?
- 11. Quando utilizzare le interfacce o classi astratte? Quando usare entrambi?
- 12. Quando usare set -e
- 13. Quando utilizzare socket.io e quando usare ajax
- 14. C# Perché non dovrei mai usare le coroutine?
- 15. C# Quando dovrei usare List e quando dovrei usare l'arraylist?
- 16. Quando usare LEFT JOIN e quando usare INNER JOIN?
- 17. Quando usare .mdf e quando .sdf?
- 18. Quando dovrei usare setUpClass e quando __init__?
- 19. Quando dovrei usare le proprietà di dipendenza in WPF?
- 20. Quando usare @Embedded e @Embeddable?
- 21. Rails Observers - Quando e quando non usare osservatori in Rails
- 22. Linguaggi di scripting che supportano fibre/coroutine?
- 23. Perché e quando usare __noop?
- 24. Come usare e quando è utile usare memmove in C?
- 25. Quando dovrei usare # in ColdFusion?
- 26. SPL vs. Array: quando dovremmo usare SPL e quando dovremmo usare l'array in PHP?
- 27. CompositeWPF: EventAggregator - quando usare?
- 28. Quando usare SwingUtilies.invokeAndWait/invokeLater
- 29. Quando usare StringBuilder?
- 30. Quando dovrei usare CompiledQuery?
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
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. –