корень зла (программистское)
Dec. 1st, 2009 05:07 pmЛюбопытная попытка написать супер-оптимизированный HTTP request/response parser. Намерения самые добрые, но... мне кажется, в этом небольшом модуле я смог бы набрать материала на часовую лекцию о том, когда не надо оптимизировать и как не надо.
Даже проглядев его вскользь, я вижу несколько мест, где на первый взгляд очень эффективный подход на самом деле даст относительно медленный код, который легко можно улучшить; а также заодно и место, где есть потенциальный buffer overflow. Утверждение автора, что его модуль "...is nearly optimal in its use of CPU instructions", конечно, слишком оптимистично. Но главное - почти наверняка выбранная модель общения с клиентом, через колбэки, на практике приведет к большим потерям времени и эффективности, чем столь тщательно сынженированные ручные подгонки под названия HTTP-методов, или отсутствие malloc()-ов.
Меж тем проект, ради которого это затеяно, Node.js (быстрый V8-джаваскрипт на сервере), весьма интересен.
Даже проглядев его вскользь, я вижу несколько мест, где на первый взгляд очень эффективный подход на самом деле даст относительно медленный код, который легко можно улучшить; а также заодно и место, где есть потенциальный buffer overflow. Утверждение автора, что его модуль "...is nearly optimal in its use of CPU instructions", конечно, слишком оптимистично. Но главное - почти наверняка выбранная модель общения с клиентом, через колбэки, на практике приведет к большим потерям времени и эффективности, чем столь тщательно сынженированные ручные подгонки под названия HTTP-методов, или отсутствие malloc()-ов.
Меж тем проект, ради которого это затеяно, Node.js (быстрый V8-джаваскрипт на сервере), весьма интересен.
no subject
Date: 2009-12-01 03:23 pm (UTC)no subject
Date: 2009-12-01 03:29 pm (UTC)"оптимальный" - опасное слово :)
no subject
Date: 2009-12-01 03:46 pm (UTC)Ну а в данном случае ragel лучше тем, что не нуждается в коллбэках - обработчик пишется просто инлайн. Хотя, конечно, и там boilerplate code нужно писать, так что тоже не идеал.
no subject
Date: 2009-12-01 04:45 pm (UTC)no subject
Date: 2009-12-01 03:24 pm (UTC)no subject
Date: 2009-12-01 03:28 pm (UTC)no subject
Date: 2009-12-01 03:48 pm (UTC)no subject
Date: 2009-12-01 04:02 pm (UTC)no subject
Date: 2009-12-01 04:01 pm (UTC)no subject
Date: 2009-12-01 04:07 pm (UTC)обратите внимание, что ch - char, а не unsigned char.
no subject
Date: 2009-12-01 04:12 pm (UTC)(no subject)
From:(no subject)
From: (Anonymous) - Date: 2009-12-01 05:33 pm (UTC) - Expand(no subject)
From:no subject
Date: 2009-12-01 04:11 pm (UTC)no subject
Date: 2009-12-01 04:14 pm (UTC)no subject
Date: 2009-12-01 05:33 pm (UTC)(no subject)
From:(no subject)
From:no subject
Date: 2009-12-01 06:19 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:Почитал еще
From:(no subject)
From:no subject
Date: 2009-12-01 06:08 pm (UTC)Так там callbacks встраиваемые.
no subject
Date: 2009-12-01 06:31 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-12-01 06:13 pm (UTC)какое страшное слово
no subject
Date: 2009-12-01 07:02 pm (UTC)1) зачем вообще оптимизировать http parser. Неужели это составляют хоть сколько-нибудь значимую часть нагрузки на веб сервер?
2) зачем JavaScript на сервере?
no subject
Date: 2009-12-01 07:18 pm (UTC)(no subject)
From:(no subject)
From:no subject
Date: 2009-12-01 07:19 pm (UTC)2) JS, в общем, хороший и мощный динамический язык, если правильно на него смотреть (см. Крофорд итд.). Под V8 он к тому же еще и очень быстрый, и наверное (говорю это от фонаря - сам не проверял!) вполне может поспорить по скорости, скажем, с Питоном или ПХП. А вместе с event-driven IO, который добавляет этот самый Node.js, он становится сравним с продвинутыми фреймворками на динамических языках, типа Twisted.
Так что писать на нем сайты - возможность как минимум интересная; хотя, конечно, несравнимо более бедные библиотеки, это да. С другой стороны, "все" уже знают Джаваскрипт.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2009-12-01 09:14 pm (UTC)no subject
Date: 2009-12-02 02:11 am (UTC)Из смешных приложений JS на сервере я тесно общался с VoiceXML. Там авторы хотели сделать, чтобы все выглядило типа как HTML (простим им, в середине 90-х многие были очарованы), но поскольку никакого броузера там нет, то парсить и исполнять JS приходилось на том же самом сервере
no subject
Date: 2009-12-02 07:42 am (UTC)Ну вообще-то - да, составляет. Даже простой accept filter в ядре уже показывал десятки процентов прироста производительности для сервера _статики_.
Впрочем, я лично с HTTP в этом плане не работал, работал с SIP, у которого синтаксис сделан в тех же принципах и методах как HTTP, но ещё больше грамматизирован. Так вот - его парсинг представляет собой область, в которой можно достичь как высокой эффективности, так и наоборот - кошмарных тормозов на ровном месте. С тех пор я систематически посылаю лучи диареи народу из IETF.;(
(no subject)
From:(no subject)
From:Он там несколько увлекся идей написать автомат вручну
Date: 2009-12-01 07:58 pm (UTC)