Size: a a a

2020 October 19

OI

Oleg Ignatov in pro.cxx
В нем не надо  искать средства рефакторинга
источник

AM

Alexander Malkov in pro.cxx
Друзья, есть тут те, кто уже плотно работал с корутинами?
Вопрос в следующем, как корутинами организовать реальную асинхронную работу?
Получается, что у нас в любом случае останавливается контекст выполнения и переключается на контекст сопрограммы, где после выполнения каких-то операций идет возврат назад, продолжается выполнение первого контекста, но вопрос вот в чем, чтобы сделать асинхронную команду, после выполнения которой запускается callback можно использовать future async thread - все они завязаны на потоках, поэтому при вызове, потратят время и ресурсы на создание потока и займут где-то 2 МБ памяти для потока, приэтом, корутина потратит мало ресурсов для разворота стека для нее, но при этом она полностью останавливает контекст выполнения до определенного момента, пока не будет вызвано coro.resume();
возможно ли как-то организовать, чтобы у нас несколько задач работали асинхронно, одновременно, при этом, чтобы было это неблокирующей операцией?
Например, есть таймер, который каждые 2 секунды пишет в лог какую-то информацию
Task log_info() {
   while (true) {
       std::cerr << some_info(); << std::endl;
       co_await timer(2s);
   }
}

и есть код, который асинхронно записывает что-то в бд и вызывает после этого callback
Task write_db(std::string info){
   co_await async_write_db(info);
   callback();
}

При этом, если мы вызовем так:
int main() {
   log_info();
   write_db("A");
}

то write_db никогда не выполнится, так как log_info займет весь поток
сюда по любому придется подключать потоки? и как это грамотнее реализовать?
Надеюсь понятно описал)
источник

SS

Sergey Sobolev in pro.cxx
Oleg Ignatov
В нем не надо  искать средства рефакторинга
Ну это вам не надо, простите. А то, что вы выше описали, умеет каждая нормальная среда
источник

NV

Nik Vzdornov in pro.cxx
Oleg Ignatov
В нем не надо  искать средства рефакторинга
Ну естественно... Когда в следующий раз что-то понадобится не буду ничего искать.
источник

IZ

Ilia Zviagin in pro.cxx
Oleg Ignatov
При всей своей быстроте и простоте VS Code помимо подсветки синтаксиса еще имеет (внезапно!) некоторый функционал:
- удобная работа с гитом
- удобная работа с gdb
- нафигация по кодовой базе
Это есть вообще в любой IDE
источник

D

DigitaLobster in pro.cxx
Удобная работа с гитом далеко не везде
источник

OI

Oleg Ignatov in pro.cxx
Sergey Sobolev
Ну это вам не надо, простите. А то, что вы выше описали, умеет каждая нормальная среда
нормальная - это которая грузится по полчаса типа джетбрейновского подделья? Разработка в vscode такая же быстрая и чёткая как в виме, но плюсом вы получаете ряд весьма аппетитных плюшек. Вы просто не поняли его идеологию
источник

o

osm1um in pro.cxx
Oleg Ignatov
нормальная - это которая грузится по полчаса типа джетбрейновского подделья? Разработка в vscode такая же быстрая и чёткая как в виме, но плюсом вы получаете ряд весьма аппетитных плюшек. Вы просто не поняли его идеологию
Похоже кто-то работал с QtCreator'ом на винде))
источник

IZ

Ilia Zviagin in pro.cxx
Oleg Ignatov
нормальная - это которая грузится по полчаса типа джетбрейновского подделья? Разработка в vscode такая же быстрая и чёткая как в виме, но плюсом вы получаете ряд весьма аппетитных плюшек. Вы просто не поняли его идеологию
Но только не IDE это.
источник

D

DigitaLobster in pro.cxx
У кого-то raspberry вместо компа?
источник

SS

Sergey Sobolev in pro.cxx
Oleg Ignatov
нормальная - это которая грузится по полчаса типа джетбрейновского подделья? Разработка в vscode такая же быстрая и чёткая как в виме, но плюсом вы получаете ряд весьма аппетитных плюшек. Вы просто не поняли его идеологию
Вы сейчас тему сменили, про джетбрейнс никто не говорил, так надо завершать этот диалог
источник

IZ

Ilia Zviagin in pro.cxx
Вот вот. Завершать
источник

o

osm1um in pro.cxx
Вообще сам пишу на коде, поскольку не грузит систему, а функционала более чем хватает.

Чего обычным смертным нужно кроме удобной работы с редактором, отладчиком и каким-то CMake'ом?
источник

AU

Abu Umar in pro.cxx
DigitaLobster
У кого-то raspberry вместо компа?
Creator с кучей плагинов на слабом железе на окошках так быстро грузится что можно успеть чай заварить
источник

o

osm1um in pro.cxx
Если постараться можно и всякие метрики закатить.
источник

AM

Alexander Malkov in pro.cxx
давайте лучше о корутинах)
источник

AM

Alexander Malkov in pro.cxx
давайте я проще напишу:
Есть функция, мы запустили в ней асинхронную операцию в которой есть коллбек, все функция завершилась асинхронная операция пошла работать дальше, выполнилась, выполнился коллбек, пошло все работать дальше
--
корутины:
есть функция, запустили в ней co_await после чего запустили коллбек, и вот тут проблема - останавливается выполнение всего контекста, как бы мы это делали в синхронном режиме:

void async_func() {
  std::async(std::launch::async, []() {
         some_func();
         callback();
   }
}

int main() {
   async_func();
}

Тут неблокируется функция и все норм идет дальше
А вот так
Task coro_func() {
   co_await some_func();
   callback();
}

int main() {
   coro_func();
}

пока callback не выполнится контекст дальше coro_func не выполняется, как будто мы вызвали функцию в синхронном режиме - это нормальное поведение? и как все-таки использовать это асинхронно?
источник

AM

Alexander Malkov in pro.cxx
Спасибо всем за участие) вопрос исчерпан)
источник

SK

Stas Koynov in pro.cxx
Alexander Malkov
давайте лучше о корутинах)
Если по делу, не используйте их в проде, тем более на эмбедете. просто напишите конечный автомат и все. он прост, все логично, можно даже студента заставить его поддерживать. Конечно сейчас придут люди мол Коорутины, все их ждали, что вы такое говорите...
источник

AZ

Alexander Zaitsev in pro.cxx
Stas Koynov
Если по делу, не используйте их в проде, тем более на эмбедете. просто напишите конечный автомат и все. он прост, все логично, можно даже студента заставить его поддерживать. Конечно сейчас придут люди мол Коорутины, все их ждали, что вы такое говорите...
так надо просто писать конечный автомат на корутинах!
источник