[Moscow.pm] чем плох девелоперский веб-сервер catalyst

Монашёв Михаил postmaster на softsearch.ru
Чт Дек 11 09:23:42 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











-- 
С уважением,
Монашёв Михаил, SoftSearch.ru
mailto:postmaster на softsearch.ru
ICQ# 166233339
http://michael.mindmix.ru/
Без бэкапа по жизни.



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