![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
Pfailed |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 22 Всего: 39 |
Недавно обнаружил для себя замечательный модуль Coro.
Привлекло внимание его краткое описание:
Обрадовавшись, что кто-то запилил более годные треды для perl принялся изучать документацию. Но всё оказалось не так просто, как хотелось бы. На самом деле Coro оказался не модулем реализующим создание потоков, в его привычном понимании. Coro -- ни что иное, как продвинутая реализация сопрограмм (coroutine) в Perl, т.е. таких подпрограмм, из которых можно выйти в каком-то её месте, выполнить другую часть программы, а затем вновь вернуться к тому, на чём приостановилось выполнение подпрограммы (этакий goto без тормозов). Помимо этого в Coro есть менеджер созданных сопрограмм, который эффективно переключается между ними в нужные моменты времени, обеспечивая ту саму псевдопараллельность выполения. Таким образом Coro очень хорошо подходит для работы с сокетами: в то время когда какой-либо из сокетов ожидает прихода данных менеджер сопрограмм переключается на другие сопрограммы и в итоге тормоза одного сокета не останавливают всю программу. В чём преимущество Coro перед событийно-ориентированными модулями вроде AnyEvent и POE ил простого цикла select? А в том, что если у вас уже есть рабочий код, то вам скорее всего придётся его переписать практически полностью, чтобы воспользоваться этими модулями, но не в случае с Coro. Простой пример. У меня есть модуль Net::Proxy::Type для определения типа прокси (который ничего не знает про параллельную обработку нескольких прокси) и несколько тысяч прокси тип которых нужно определить.
При этом потребление памяти очень небольшое, форками и модулем threads такого не добиться, но в тоже время не придётся переписывать рабочий код, как в случае с AnyEvent. Кстати Coro написал Marc Lehmann, являющийся помимо этого автором AnyEvent и многих других полезных вещей. За истину не ручаюсь, т.к. только начал с этим знакомиться. |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |