ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
19 мая
339096 Топик полностью
=AlexD= (06.07.2012 08:37 - 08:51, просмотров: 525) ответил bialix на Изобретаю велосипед на тему асинхронных функций. Предлагаю вам начинать кидаться гнилыми помидорами и тухлыми яйками, либо дополнить своими дельными соображениями если таковые имеются. Вобщем, чем плохая тема для тяпницы?
Ты просто не понял, что такое сопрограммы, и поэтому запутался в трёх соснах. Если ты где-то прочитал, что сопрограммы это как обычные процедуры, то найди аффтора убей и съешь :-))). 1) coroutine - это фактически поток/нить, которые готовы к выполнению постоянно. 2) Каждой сопрограмме выделяется свой стек, в котором она хранит локальные параметры. 3) Из них нельзя "выйти" , точнее выход будет означать, что в следующий вызов придётся заново инициализировать стек и исполнять её с самого начала. 4) Сопрограммы могут вызывать друг-друга сколько угодно раз, при этом не происходит рекурсии, просто управление переключается между coroutine (также как и между потоками/нитями), главное отличие от ОСи - нет шедулера и приоритетов, поэтому сопрограмма должна явно указать кто следующий. 5) Если нужно "вернуться" именно в вызвавшую сопрограмму, то нужно в контексте coroutine передать адрес вызвавшей сопрограммы, но если сопрограмма вызывает другую (третью) сопрограмму, то эта информация с высокой вероятностью будет потеряна, т.к. получить управление "обратно" сопрограмма может только будучи явно вызванной другой сопрограммой, и этот адрес ессно затрётся. 6) Вести стек вызовов асинхронно выполняемых функций бессмысленно, ибо рано или поздно он переполнится. 7) Поэтому coroutine просто должна знать, куда возвращать управление во всех случаях - это больше некому знать, ибо шедулера то нет. Короче тебе нужна просто кооперативная ОСь без шедулера, с явным указанием порядка выполнения. Обмениваться данными можно через глобальные структуры. Подумай в этом направлении и у тебя всё получится.
надо придумать объяснение этому мудизму, иначе рехнуться можно