<div dir="ltr"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">8 февраля 2015 г., 23:22 пользователь Alexander Lourier <<a href="mailto:aml@rulezz.ru" target="_blank">aml@rulezz.ru</a>> написал:<br>
>> > ну смешно же. любой демон, работающий с внешней средой.<br>
>> ну, то есть, прокси. одну задачу придумали. а еще?<br>
><br>
><br>
> Почему обязательно прокси?<br>
><br>
> Практически любое веб-приложение требует на каждый запрос аутентифицировать<br>
> сессию, запросить данные у бэкендов (memcached, база, какие-то другие<br>
> серверы), собрать шаблон, отправить обратно. Вычислительной нагрузки - кот<br>
> наплакал (сформировать запросы, распарсить ответы, отрендерить шаблон,<br>
> сформировать ответ). Но это не прокси, это полноценное приложение, которых<br>
> большинство.<br>
<br>
Да, вот именно что большинство. Но не согласен, что в перечисленном<br>
выше списке вычислительной нагрузки - кот наплакал. Её много.<br>
Нельзя сделать такое приложение только асинхронным. Пока в<br>
каком-нибудь одном  воркере будут вычисления, все остальные будут<br>
тупить.<br></blockquote><div><br></div><div>В перле - да. В общем случае - необязательно. В Go свободный тред из пула подхватит горутину и продолжит её выполнять.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Соответственно придётся делать и fork, а внутри каждого unix процесса<br>
- асинхронный код. Что похоже на двойную работу ради экономии памяти.<br></blockquote><div><br></div><div>Fork или threads - обязательно, чтобы загрузить все ядра процессора. Асинхронный код, чтобы использовать их более эффективно.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Имхо вообще асинхронные приложения мало где оправданы - это должно<br>
быть приложение либо блокирующеесся только вводом-выводом, </blockquote><div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">либо то где<br>хайлоад/много воркеров и разработка fork+AE+риск что Марк найдёт свой<br>автобус хоть как-то выгоднее содержания дополнительных компов/памяти<br>памяти (для "большинства задач" речь о выделении о покупке одной<br>планки памяти в следующий апгрейд).<br></blockquote></div><div><br></div><div>Они оправданны, если имеет смысл экономить ресурсы. Если же эффект от экономии не оправдывает затрат времени разработчика, то конечно не надо. Планка в один сервер стоит дёшево. Если серверов 10, и планка нужна в каждый, это уже дороже. Если это арендованные серверы или облако, то намного дороже и каждый месяц. Если усилия разработчиков на разработку и поддержку асинхронного кода меньше, чем выгода от его внедрения, то ну его нафиг, конечно.</div><div><br></div><div>Собственно, суть в том, что на перле писать и поддерживать асинхронный код - это боль. Поэтому нужна очень серьёзная экономия, чтобы этим заниматься.</div><div><br></div><div>На Go (или даже Stackless Python) это совершенно естественно и бесплатно. Поэтому там даже вопрос так не стоит - конечно надо писать асинхронно.</div><div> <br></div><div><br></div></div></div>