Как корутина в с++ понимает, в какой момент встать на паузу и в какой момент возобновить работу?
Расскажите про корутины в C++. Вот, например, функция (корутина) работает работает, и в какой то момент решает, тут пока мне делать больше нечего (нужные данные еще не пришли) и приостанавливает работу и выходит. Вопроса у меня два. 1 ) Как корутина понимает, что пора встать на паузу? Ведь, допустим, чтоб узнать есть ли там еще данные, надо сделать попытку чтения, а если данных нет, то ты повиснешь на этом вызове. Грубо говоря, ты не можешь узнать заранее, когда выполнил getchar() , сразу ли пользователь что то введет или сначала сходит попьет чайку и подумает что ввести. Ты заранее не знаешь исполнять ли getchar сейчас или подождать, вдруг кто то там еще пьет чай и не готов ввести данные. Как корутина понимает, что вот именно сейчас я точно знаю, что вызов getchar точно ничего хорошего не даст (я взял для примера getchar, просто чтоб показать, что мы заранее не знаем, отдаст ли она данные сразу или нет, это может быть любая функция, что отдает данные) . Вопрос 2) Как корутина понимает, что, кажется, кто то там уже попил чайку и я могу продолжить работу и в этот раз когда я позову getchar() этот кто то точно сразу отдаст мне нужные данные?
Ответы (1 шт):
Именно поэтому библиотеки для работы с корутинами часто идут с кастомными функциями для работы с файлами/IO/сетью.
Да, они не могут нормально использовать блокирующие функции (если только не оставлять целый поток ее ждать), или те, которые просто возвращают "пока нет данных" (не звать же их постоянно в бесконечном цикле). Им нужно использовать такое системное API, которое вызывает колбек, когда данные приходят.