Re: Coroutines
От: z00n  
Дата: 24.02.09 15:09
Оценка: 17 (2)
Здравствуйте, DemAS, Вы писали:

DAS>1. Буду благодарен за пример проблемы, в решении которой coroutines не

DAS>притянуты за уши.
В луа, например, корутины обыденная часть языка, и есть много чего почитать от научных статей до конкретных паттернов применения:
Revisiting Coroutines (оч. рекомендую)
Token Filters(типичный пример применения)
PIL: Coroutine Basics
http://lua-users.org/wiki/FiltersSourcesAndSinks
http://lua-users.org/wiki/CoroutinesAsEventHandlers
http://lua-users.org/wiki/CoroutinesAsConnectionHandlers
http://lua-users.org/wiki/FunWithCoroutines

У меня обычный случай применения: либо итератор для разлапистой структуры данных, либо низкоуровневый кирпич для чего-нибудь более интересного. На основе корутин (по крайней мере если они кооперативные треды как в луа) можно реализовать более высокоуровневый набор примитивов, например CSPOCCAMLimboStackless Python.
Events vs. Threads
Bell Labs and CSP Threads

DAS>2. Вопрос по реализации. Если я правильно понимаю, между вызовами coroutine

DAS>ее состояние(локальные переменные и точка возврата) должна где-то
DAS>сохраняться. Где она сохраняется? Неужели в стеке?
В луа корутина — просто кооперативный тред со своим стеком (примерно как в erlang). Занимает примерно 1K(тоже примерно как в erlang) — можно завести их сотни тысяч.

Хороший обзор методов реализации есть в документации luajit:
Context Switching Methods
Вот еще известный документ:
Coroutines in C
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.