[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 было извлечено&hellip;
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20081211/081b4ceb/attachment.html>


Подробная информация о списке рассылки Moscow-pm