[C/C++] Аргументы за и против сопрограмм (Boost.Coroutine)

Yulka-MOl

Привет.
Речь о C++, STL и Boost.
Хотим реализовать http-сервер на технологии boost::asio с асинхронно работающими нитями без lock'ов на очереди task'ов.
В справке дано 4 примера как это сделать.
http://www.boost.org/doc/libs/1_47_0/doc/html/boost_asio/exa...
Из всех примеров интерес представляет только третий и четвёртый.
Один использует coroutines (имитацию сопрограмм Кнута на C другой - нет.
Вот задался вопросом, а зачем эти coroutines вообще могут понадобится.
И не перекрывают ли накладные возможности их использования те "удобства", которые они предоставляют?
Http-сервер планируется "скрещивать" с python-кодом (использовать скрипты для логики обработки запросов).
Смогут ли сопрограммы в этом как-то помочь или лучше вообще не смотреть в этом направлении?
Заранее спасибо за любые аргументы за и против.

Werdna

http://github.com/bachan/ugh
Всё уже сделано, развивайте в строну Питона!
ЗЫ: Всё-таки в Угх потоков нет, надо запускать по числу ядер и сильно долго не задерживаться в обработчике без переключения корутины.

Yulka-MOl

Спасибо за ссылку. :)
Развивайте в строну Питона!
Как это видится? Сделать взаимодействие потоков через pipe, как сделано в hadoop?
Для чего используются coroutines в вашем сервере?
Почему вы решили их использовать?
Поясните, я не вижу очевидных плюсов.

Werdna

Начну с последних вопросов.
Для чего используются coroutines в вашем сервере?
Почему вы решили их использовать?

Корутины используются для переключения контекста до момента окончания подзапросов. Т. е. сервер обрабатывает запрос, в какой-то момент решает сделать один или несколько подзапросов, делает "заказ" и вызывает ugh_wait. Когда запросы выполняются (или не выполняются по таймауту то управление передаётся дальше.
Использовать корутины решили для того, чтобы было удобно писать однопоточный код, не думая об организации работы событийной машины. С виду ты просто быдлокодишь, делая вид что у тебя обычные потоки.
Как это видится? Сделать взаимодействие потоков через pipe, как сделано в hadoop?

...кажется мы совсем говорим о разных вещах, поясни что тебе хочется сделать...
Что я имел в виду: если ты хочешь корутинный программы писать на Питоне — тебе всего лишь надо подключить интерпретатор Питона и запускать свои скрипты. Маленький нюанс — они должны быть сверхбыстрыми и не делать никаких блокировок.
Но может быть тебе надо что-то совсем другое? Если честно, там где Угх Питон будет смотреться бледно — больно медленный язык, не проще ли банально запускать в несколько потоков обычный Питон?

Yulka-MOl

Спасибо за аргументированную позицию.
А что за слухи, что coroutines не рекомендовали к использованию или
про то, что некоторые команды разработчиков ставят скрипт на svn, который не позволяет коммитить код со словами 'yield' и тому подобным?

erotic

А что за слухи, что coroutines не рекомендовали к использованию
Бред какой-то. В мейл.ру очень много используется tarantool, сделенный как раз на корутинах. http://habrahabr.ru/company/mailru/blog/136288/
Держит до фига запросов, правда, у него протокол взаимодействия еще очень легкий.
Внутри запроса можно выполнять lua процедуры. lua, потому что очень быстрый jit интерпретатор у ней.

hiper-hoper

lua, потому что очень быстрый jit интерпретатор
ты уверен в том, о чем говоришь?

erotic

Я уверен, что правильно пересказываю то, что прочитал. Я уверен, что это действительно широко используется в указанной компании.

Werdna

А что за слухи, что coroutines не рекомендовали к использованию
Это не слухи, это чистая правда. Корутины выполняются в одном потоке и на одном ядре, и несут ровно те же в себе грабли, что и использование nginx, например.
Короче, никаких граблей, если ты всегда понимаешь, что тебе нельзя выполнять тяжелые и долгие вычисления. Долгие по меркам того, как должны обрабатываться запросы.
приведу пример на nginx. Сервер, который отдаёт статику и почти не загружен по CPU решают напрячь немного модулем, который шаблонизирует ctpp. Запросов на ctpp пусть будет 4%, и CPU не сильно загружается. ОДНАКО у тебя начинает не успевать отдаваться статика, кончаются сокеты и всё становится раком. Причина очевидная — за то время пока ты делал шаблонизацию, у тебя пришло 500 запросов на статику, которые просто скопились в очереди. Если среди этих 500 у тебя есть 10 на шаблонизацию — жди ядерного взрыва.

eduard615

на самом деле луа далеко нет так широко используется: все-таки она довольно сильный оверхед дает. в продакшене на луа только простейший код, т..е. луа в тарантуле конечно приколько, но инструмент сильно ограниченный, имхо, реальное развитие этой идеи лежит немного в другой плоскости.

eduard615

Это не слухи, это чистая правда.

стричь газон на даче маникюрными ножницами пиздец как неудобно. хотя стричь ногти газонокосилкой еще хуже.

erotic

ты уверен в том, о чем говоришь?
Да, теперь мне рассказывают, что lua там работает очень херово и ужасно тормозит. Собсно, пробовал в свой софт встраивать lua, тоже не порадовало с точки зрения производительности.
Оставить комментарий
Имя или ник:
Комментарий: