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?
Antwort
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.
Danke für die schnelle Antwort. –
Gibt es noch andere negative Nebenwirkungen, auf die Sie achten sollten? – aleclarson
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.
- 1. Wann man Fabrikmuster benutzt?
- 2. Wann man partielle Mocks benutzt?
- 3. Wann man WYSIWYG-Editoren benutzt?
- 4. Beste moderne Textparsing? AKA Wann benutzt man Lex und Yacc?
- 5. Wann man den Entity Manager in Symfony2 benutzt
- 6. QtScript vs QJSEngine, wann man den einen oder anderen benutzt?
- 7. Wann benutzt man Haystack/ElasticSearch vs Django's ORM
- 8. Was ist Ninject und wann benutzt du es?
- 9. Wann verwendet man .mdf und wann .sdf?
- 10. Wann man Schauspieler in libgdx benutzt? Was sind Nachteile und Vorteile?
- 11. Wie kann man feststellen, wann JUnit fertig ist, indem man einfach einen TestWatcher benutzt?
- 12. Wie benutzt man TextAction
- 13. Wie benutzt man onResume()?
- 14. Wie benutzt man Resources.getFraction()?
- 15. Wie benutzt man pg_stat_activity?
- 16. Wie benutzt man history.js?
- 17. Wie benutzt man Jquery?
- 18. Wie man ModelMultipleChoiceFilter benutzt?
- 19. Wie benutzt man TailCalls?
- 20. Wie benutzt man JProgressBar?
- 21. Wie benutzt man Split?
- 22. Wie benutzt man ActionMenuView?
- 23. Wie benutzt man ADBannerView?
- 24. Wie benutzt man TCharHelper?
- 25. Wie benutzt man will_paginate?
- 26. Wie benutzt man HorizontalScrollView?
- 27. Wie benutzt man org.netbeans.swing.outline?
- 28. mongoose Unterschied zwischen Pre speichern und validieren? Wann benutzt man welchen?
- 29. Was sind die Unterschiede zwischen Grunt, Gulp.js und Bower? Warum & wann man sie benutzt?
- 30. Gepuffert gegen nicht gepuffert, welches benutzt man?
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
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. –