да, увидел в доке. А как не получать новых каллбеков, пока я не обработаю текущий? И чтобы переданные данные не потерялись за это время
ты языки не путаешь? :) У тебя обработка коллбека синхронная, пока ты вычитываешь буфер и его обрабатываешь никаких новых коллбеков не будет. Ну если специально не заморачиваться.
ты языки не путаешь? :) У тебя обработка коллбека синхронная, пока ты вычитываешь буфер и его обрабатываешь никаких новых коллбеков не будет. Ну если специально не заморачиваться.
я примерно вообще не умею AE и вообще асинхронное ни на одном языке. Читаю документацию вот сейчас и про то что каллбеки синхронны - нигде пока не увидел. Или я где-то не там читаю?
Ну AE работает в один поток, соответственно в один момент времени может исполняться физически только один коллбек. Об этом где-то есть в доке, но мельком.
так. А вот если у меня два порта и я создал два AnyEvent::Handle и у меня в одном случился каллбек - во втором он не случится пока я не обработаю каллбек в первом?
я примерно вообще не умею AE и вообще асинхронное ни на одном языке. Читаю документацию вот сейчас и про то что каллбеки синхронны - нигде пока не увидел. Или я где-то не там читаю?
Async ≠ multi-threaded. Оно в один поток выполняется, просто на блокирующих сисколлах умеет переключать контекст и делать другие вещи, подменив сисколлы на неблокирующие
так. А вот если у меня два порта и я создал два AnyEvent::Handle и у меня в одном случился каллбек - во втором он не случится пока я не обработаю каллбек в первом?
так. А вот если у меня два порта и я создал два AnyEvent::Handle и у меня в одном случился каллбек - во втором он не случится пока я не обработаю каллбек в первом?
Конечно. Event loop получит управление только когда коллбэк отработает или «заблокирует»