@roginvs

Генерация async кода из обычного, если ли способ?

Хочу, к примеру, написать WS сервер. Держать процесс на каждое соединение не очень хорошо, поэтому такие вещи надо бы делать асинхронными. Писать асинхронный код немного муторней чем обычный линейный, и хочется иметь возможность писать код как обычно, а чтобы препроцессор его уже преобразовывал в async.
# Т.е. обычно, к примеру, пишу
my $result = ask_database('query');

# когда тоже самое, но асинхронно:
ask_database('query', sub {
  my $result = shift;
});

Т.к. код лочится в основном на ожидании ответа от сети (от базы, или от другого API), то почему бы не делать такое преобразование кода автоматически? Мы ведь знаем когда код вызовет функцию на которой можно заблокироваться.
Либо другой вариант:
// Из этого
console.info('test1');
hypothetic_sleep(1000);
console.info('test2');

// Автоматически бы делалось это
console.info('test1');
setTimeout(function() {
  console.info('test2');
})


В питоне в tornado есть gen.coroutine , который вроде бы пытается сделать как раз именно такое упрощение, но проблема в том, что не все библиотеки поддерживают tornado и async вызовы.
  • Вопрос задан
  • 126 просмотров
Решения вопроса 1
@roginvs Автор вопроса
nodejs + async/await
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@redakoc
Go умеет. Минимальными телодвижениями.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы