[Moscow.pm] чем плох девелоперский веб-сервер catalyst
Анатолий Шарифулин
sharifulin на gmail.com
Чт Дек 11 08:31:22 PST 2008
То, что "найдутся", я не спорю, но интерпретатор не сможет угадать, что за
чем надо выполнять, программист должен рассказать.
Твои примеры не отражают сути асинхронности,
Вот пример:
1,2 -> 3
4,5 -> 6
3,6 -> 7
на BASH: ( 1 &; 2 &; wait; 3 ) & ; ( 4 &; 5 &; wait; 6 ) & ; wait; 7
на Perl:
Wait { 7 } [
sub {
Wait { 3 } [
sub { 1 },
sub { 2 },
]
},
sub {
Wait { 6 } [
sub { 4 }
sub { 5 }
]
}
];
На сколько мне известно, на POE, IO::Lambda такое сделать можно, на AnyEvent
без Coro нет.
Так вот, при линейном это записывается так: 1,2,3,4,5,6,7
Как интерпретатор должен понять, что этот код нужно выполнить максимально
эффективно и асинхронно?
11 декабря 2008 г. 18:57 пользователь Монашёв Михаил <
postmaster на softsearch.ru> написал:
> Здравствуйте, Анатолий.
>
> > Вообще, ═в ═теории, наверное можно написать такой перл (седьмой? :-)),
> > который ═сам ═бы ═внутри ═себя ═мультиплексировал запущенные процесс и
> > переписывать ═под ═мультиплексирование ═приложения не нужно было бы. А
> > сейчас ═конечно ═под Каталист HTTP-движок с мультиплексированием никак
> > не сделать.
>
> > Вот это вы сильно сказали, "переписывать не нужно было бы" :)
>
> Даже простейший линейный скрипт параллелится на несколько корок.
> Всегда найдутся небольшие операции, которые можно выполнять независимо
> от других.
> Пример 1:
> $y = ($a+$b)*($c+$d);
> то, что в скобках не зависит никак от того, что в других скобках и
> может выполняться параллельно.
>
> Пример 2:
> for ($i=1;$i<100;$i++){
> $x +=$i
> }
> for ($j=1;$j<200;$j++){
> $y++;
> }
> куски кода друг от друга совсем не зависят и могут выполняться
> параллельно.
>
> Пример 3:
> набираем на одной консоли
> perl 1.pl
>
> набираем на другой консоли
> perl 2.pl
>
> у нас запускаются 2 процесса. А мог бы запуститься 1. Проблема лишь в
> том, что перл пока не умеет при ожидании получения данных из сокета
> или с диска делать что-то ещё. Он тупо ждёт, занимая оперативку и
> приходится использовать либы для асинхроннхронной работы, чтобы
> написать плохо читабельную и трудно отлаживаемую программу. Также перл
> пока не умеет находит независимые друг от друга куски кода и выполнять
> их параллельно на нескольких корах. Так что можно сильно ускорится не
> переписывая перловые скрипты. Нужно лишь "немного :-)" допилить перл.
>
> > Линейное программирование не может выполняться асинхронно, поэтому оно
> линейное.
> > Поэтому в Perl 6 есть: sync { } и async { }
>
> Есть подозрение, что интерпретатор сам может определить какой код в
> каком режиме можно исполнять. Только он пока этому не научился.
>
> > Есть реализация для mysql асинхронного клиента, но чтобы ее
> > прикрутить к каталисту можно офигеть :)
>
> Дай ссылочку плз.
>
>
> --
> С уважением,
> Монашёв Михаил, SoftSearch.ru
> mailto:postmaster на softsearch.ru
> ICQ# 166233339
> http://michael.mindmix.ru/
> Без бэкапа по жизни.
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
--
С уважением,
Анатолий Шарифулин.
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20081211/081b4ceb/attachment.html>
Подробная информация о списке рассылки Moscow-pm