[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