То, что "найдутся", я не спорю, но интерпретатор не сможет угадать, что за
чем надо выполнять, программист должен рассказать.

Твои примеры не отражают сути асинхронности,

Вот пример:

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 пользователь Монашёв Михаил <
[EMAIL PROTECTED]> написал:

> Здравствуйте, Анатолий.
>
> > Вообще, ═в ═теории, наверное можно написать такой перл (седьмой? :-)),
> > который ═сам ═бы ═внутри ═себя ═мультиплексировал запущенные процесс и
> > переписывать ═под ═мультиплексирование ═приложения не нужно было бы. А
> > сейчас ═конечно ═под Каталист 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:[EMAIL PROTECTED]
> ICQ# 166233339
> http://michael.mindmix.ru/
> Без бэкапа по жизни.
>
> --
> Moscow.pm mailing list
> [email protected] | http://moscow.pm.org
>



-- 
С уважением,
Анатолий Шарифулин.
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить