Tuesday, July 21, 2009

Практика ФП

Хотя у всех заинтересованных лиц рсс ридер уже наверняка забит пеаром первого выпуска журнала "Практика функционального программирования", не могу не отметиться тоже.


Concepts Get Voted Off The C++0X

Вот тут, по ссылке с ltu: — из C++0x решили убрать concepts! :)

Мне не то чтобы C++0x интересен с практической точки зрения, но это просто мощнейший ход.

Почему убрали: с одной стороны, часть ортодоксов не поняла зачем оно надо, и испугалсь что будет слишком легко отстрелить себе ногу (и это они про C++ говорят, хехе). С другой стороны, комитет по стандартизации испугался что авторы фичи не успеют ее допилить.

Кроме того, примечателен первый же камент от одного из авторов этой фичи — судя по тому, что он три раза упоминает там хаскель, становится совсем уж окончательно понятно откуда чуваки черпали вдохновение.

(Поскольку не все читатели моего бложека являются сиплюсплюс программерами, вкратце поясню — concepts была одной из наиболее ожидаемых фич нового стандарта популярного когда-то языка сиплюсплюс, что-то похожее на type classes в хаскеле)


Sunday, January 25, 2009

Yaws и потребление памяти

Уважаемые телерадиослушатели, мегаблог не совсем умер :)

В комментариях к записи про Yaws жжюзер [info]alekciy поинтересовался, сколько yaws будет хавать памяти на одно HTTP соединение. Понятно, что немного, но конкретные циферки всегда красноречивее слов. Не вопрос — на коленке собрался небольшой test suite. По хорошему тут надо было бы взять нормальный стенд — сервер и пяток клиентов (давняя мечта, повторить тот самый тест самому, так как его справедливо критикуют за отсутствие подробного описания условий тестирования), но под рукой только рабочий нотебук с убунтой 8.04 (Celeron 1.7, 2G памяти).

Итак, берем yaws 1.79, в качестве генератора траффика программка на C, за основу взял пример работы с epoll какого-то японца.

Тупо создаем соединения к серверу, запрашиваем файл и мееедленно (по байту) читаем ответ.

$ uname –a 
Linux lrrr-laptop 2.6.24-23-generic #1 SMP Thu Nov 27 18:44:42 UTC 2008 i686 GNU/Linux 

Исходники клиента.

График:

 yaws-mem

По оси X — количество одновременных соединений, по Y resident size процесса в килобайтах. Понятно, тут хватило б и двух точек, но мало ли что, вдруг, например, gc стал бы захлебываться с какого-то момента, надо было удостовериться.

После 10000 соединений у меня yaws начинает их дропать, хотя наверняка можно это как-то победить, в связи с убогостью тестовых условий я решил не заморачиваться.

Итого, если поделить — отжирается 14 кб памяти на коннект. Неплохо. Yaws (ожидаемо) не кушал CPU (показатель болтался около 1-2%), но, почему-то, довольно медленно принимал соединения — удавалось создать порядка 10 коннектов в секунду.

Попытка поставить в те же условия nginx пока не увенчалась успехом, соединения создаются раз в десять быстрее, но в районе 700 коннектов nginx сначала отдает 500 ошибку, потом молча закрывает соединения, а потом начинает приходить ECONNRESET. Думаю, он это делает из лучших побуждений, но я пока не нашел как на это повлиять.