Size: a a a

2016 May 04

ED

Eto Demerzel in dlang.ru
Это не классическая асинхронность, которую все знают с JavaScript. Это файберы. Аналог потоков, только в одном потоке.

Ты пишешь обычный синхронный код. Который на I/O делает yield — передаёт управление другому файберу. Так управление постоянно прыгает туда-сюда.
источник

PC

Pavel Chebotarev in dlang.ru
Разве это не и есть классическая асинхронность?
источник

PC

Pavel Chebotarev in dlang.ru
И чем отличается файбер от корутины от green thread ?
источник

ED

Eto Demerzel in dlang.ru
Pavel Chebotarev
Разве это не и есть классическая асинхронность?
Возможно слово "классическая" тут было не к месту. Я подразумевал распространённое представление, которое пришло из асинхронности в JavaScript.
источник

PC

Pavel Chebotarev in dlang.ru
Я не в курсе как там, вроде там event loop крутится неявно как то, и все на колбеках.
источник

ED

Eto Demerzel in dlang.ru
Да, event loop всем мать.
источник

DB

Dmitry Bubnenkov in dlang.ru
. Который на I/O делает yield — передаёт управление другому файберу
руrами его вызывать надо в конце функции?
источник

ED

Eto Demerzel in dlang.ru
Нет.
источник

DB

Dmitry Bubnenkov in dlang.ru
а в каких случаях надо?
источник

ED

Eto Demerzel in dlang.ru
Но конечно можешь, если знаешь, что делаешь.
источник

DB

Dmitry Bubnenkov in dlang.ru
нужно ли каждую функцию в runTask оборачивать или вайб их сам как-то параллелелит?
источник

ED

Eto Demerzel in dlang.ru
vibe.d их сам параллелит. Потому что все его I/O методы вызывают yield.
источник

DB

Dmitry Bubnenkov in dlang.ru
тоесть если я в его приложении напишу:
foo() {...}
bar() {...}

то они автоматом ассинхронны будут?
источник

PC

Pavel Chebotarev in dlang.ru
А конструкции языка он параллелит? Если например написать while(true) {}, то код ведь зависнет?
источник

PC

Pavel Chebotarev in dlang.ru
Eto Demerzel
vibe.d их сам параллелит. Потому что все его I/O методы вызывают yield.
+ получается что если использовать сторонний код, который не работает асинхронно, то могут быть проблемы?
источник

ED

Eto Demerzel in dlang.ru
Pavel Chebotarev
+ получается что если использовать сторонний код, который не работает асинхронно, то могут быть проблемы?
Да, всё верно. Например, сейчас у меня на сервере в некоторых местах используется std.net.curl. Это рождает тормоза в обработке запросов.
источник

PC

Pavel Chebotarev in dlang.ru
Ну то есть все же сами встроенные функции стандартной библиотеки не асинхронные. Косячок-с :(
источник

PC

Pavel Chebotarev in dlang.ru
А у go вроде асинхронные
источник

ED

Eto Demerzel in dlang.ru
Dmitry Bubnenkov
тоесть если я в его приложении напишу:
foo() {...}
bar() {...}

то они автоматом ассинхронны будут?
Это зависит не от того, как ты пишешь, а от того какое API будешь использовать.

Так же не стоит делать длительных вычислений. Их лучше всего выносить в отдельный поток.
источник

ED

Eto Demerzel in dlang.ru
Pavel Chebotarev
Ну то есть все же сами встроенные функции стандартной библиотеки не асинхронные. Косячок-с :(
Да, это проблемка. Но даже не знаю, как её можно решить. У vibe.d слишком много всего своего.
источник