Комментарии 62
Все-таки в линуксе с CGI намного проще :)
Сорри, сменил блог статьи и почему-то срезало окончание, поправил, буду внимательнее.
З.Ы. Я так понимаю это не баг, а «фича» :)
З.Ы. Я так понимаю это не баг, а «фича» :)
CGI+ассемблер выглядит как сущее издевательство.
CGI — ОЧЕНЬ медленный интерфейс к приложениям. Требуется подготовить среду окружения и сделать форк-экзек для каждого обращения. На фоне накладных расходов от CGI любая оптимизация кода самой программы будет микроскопической.
Всё равно, что оптимизировать расположение стаканов на столе поезда. Быстрее он от этого не поедет. Если уж хотите показать быстро-быстро-быстро, то используйте быстрые интерфейсы. WSGI, свой модуль к апачу или даже свой сервер как бэкэнд к ngnix'у.
CGI — ОЧЕНЬ медленный интерфейс к приложениям. Требуется подготовить среду окружения и сделать форк-экзек для каждого обращения. На фоне накладных расходов от CGI любая оптимизация кода самой программы будет микроскопической.
Всё равно, что оптимизировать расположение стаканов на столе поезда. Быстрее он от этого не поедет. Если уж хотите показать быстро-быстро-быстро, то используйте быстрые интерфейсы. WSGI, свой модуль к апачу или даже свой сервер как бэкэнд к ngnix'у.
Вы предисловие и наименование блога читали? А так я с вами полностью согласен :)
Как ни странно — это не очень медленный интерфейс. Собственно fork+exec в линуксе весьма быстр оказывается. Но, конечно, при условии, что запускаемая программа не здоровенная и не грузит кучу своих прибамбасов перед выполнением задачи.
WSGI — это питоновская фича. Может вы имели в виду FastCGI или SCGI?
WSGI — это питоновская фича. Может вы имели в виду FastCGI или SCGI?
блин, вот мне интересно, ты тестил?
мы вот тестили и увидели, что скорость создания потоков (даже НЕ процессов) в дебиан — 50 штук в секунду
это очень мало
50 запросов в секунду это мало для сервера, обрабатывающего http-запросы от тыщи пользователей
мы вот тестили и увидели, что скорость создания потоков (даже НЕ процессов) в дебиан — 50 штук в секунду
это очень мало
50 запросов в секунду это мало для сервера, обрабатывающего http-запросы от тыщи пользователей
Вы явно что-то не то меряли… Сейчас специально написал тест, 10 000 тредов на маке (10.5.0 Darwin Kernel Version 10.5.0: Fri Nov 5 23:20:39 PDT 2010; root:xnu-1504.9.17~1/RELEASE_I386 i386 i386) создаются за 2.8 сек, на сервере (Linux smallbrother 2.6.31-22-server #68-Ubuntu SMP Tue Oct 26 16:50:02 UTC 2010 x86_64 GNU/Linux) за 0.17 сек.
- #include <stdio.h>
- #include <stdlib.h>
- #include <pthread.h>
- #include <time.h>
- static void *thread_loop(void *arg);
- int
- main(int argc, char **argv)
- {
- int i;
- clock_t cl;
- pthread_t threads[10000];
- cl = clock();
- for (i = 0; i < 10000; i++) {
- pthread_create(&threads[i], NULL, &thread_loop, NULL);
- }
- printf("complete in %f sec\n", (float) (clock() - cl) / (float) CLOCKS_PER_SEC);
- for (i = 0; i < 10000; i++) {
- pthread_join(threads[i], NULL);
- }
- exit(0);
- }
- static void *
- thread_loop(void *arg)
- {
- }
на дебиане получилось:
complete in 0.280000 sec
segmentation fault
хотя непонятно, почему рухнуло.
complete in 0.280000 sec
segmentation fault
хотя непонятно, почему рухнуло.
ок, спасибо.
забыл сказать, что мы запускали непустые потоки явы через пул
видимо дело в этом…
забыл сказать, что мы запускали непустые потоки явы через пул
видимо дело в этом…
Я так и понял, но об этом надо писать, а то возникает ощущение, что СОЗДАНИЕ ПОТОКА — это очень медленно…
затестил на java таким кодом:
public class ThreadTest extends Thread {
private static final int N = 10000;
private static Thread[] threads = new Thread[N];
private int index;
public ThreadTest(int index) {
this.index = index;
}
public static void main(String[] args) {
long t1 = System.currentTimeMillis();
for (int i = 0; i < N; i++) {
threads[i] = new ThreadTest(i);
threads[i].start();
}
for (int i = 0; i < N; i++) {
try {
threads[i].join();
} catch (InterruptedException ignored) { }
}
System.out.println((System.currentTimeMillis()-t1) + " мс");
}
public void run() { }
}
100 тысяч потоков за 7,5 секунд
значит дело не в java
будем разбираться значит…
public class ThreadTest extends Thread {
private static final int N = 10000;
private static Thread[] threads = new Thread[N];
private int index;
public ThreadTest(int index) {
this.index = index;
}
public static void main(String[] args) {
long t1 = System.currentTimeMillis();
for (int i = 0; i < N; i++) {
threads[i] = new ThreadTest(i);
threads[i].start();
}
for (int i = 0; i < N; i++) {
try {
threads[i].join();
} catch (InterruptedException ignored) { }
}
System.out.println((System.currentTimeMillis()-t1) + " мс");
}
public void run() { }
}
100 тысяч потоков за 7,5 секунд
значит дело не в java
будем разбираться значит…
Хе-хе, ну потоки это уже FCGI, может кто-нить затестит процессы? :) Понимаю, что результаты будут не те, но все-таки может CGI не совсем умер на новых релизах (в плане скорости запуска процессов)?
вопрос лишь один: а смысл?
на C/C++ писать удобнее, если так уж хочется сэкономить
на C/C++ писать удобнее, если так уж хочется сэкономить
Вопрос тот же, что и к предыдущему оратору.
По-моему здесь программирование ради программирования… Так, для души ))
Ну вы что, компилятор не вытянет таких оптимизаций, которые доступны программисту на асме в совершенстве знающему архитектуру процессора :D
А название блога «Ненормальное программирование» Вам не дает ответа на этот вопрос?
Я на Си писал, причём не для «ненормального программирования», а для вполне себе продакшена, до ассемблера как-то не додумался :)
ЗЫ Потом открыл для себя PHP3
ЗЫ Потом открыл для себя PHP3
— Доктор, а может Java?
— Не спорьте, доктор сказал, asm, значит asm…
— Не спорьте, доктор сказал, asm, значит asm…
не поймите неправильно но первая мысль — ССЗБ )))
Я кстати подумываю о том чтобы попробывать web-development на языке Vala.
Vala быстр (сравнима с С++) и имеет кучу библиотек, например баиндинги к libsoup library.gnome.org/devel/libsoup/stable/libsoup-server-howto.html
Vala быстр (сравнима с С++) и имеет кучу библиотек, например баиндинги к libsoup library.gnome.org/devel/libsoup/stable/libsoup-server-howto.html
– Легко!
но зачем???
И опять — читать первый абзац :)
вопрос-то был риторический…
Это же блог «ненормальное программирование»
Спасибо, интересная статья, уверен что мне в ближайшее время понадобится)
Эх, еще бы сравнение производительности…
Например, сортировка пузырьком на PHP через CGI, PHP через mod_php и CGI asm
Например, сортировка пузырьком на PHP через CGI, PHP через mod_php и CGI asm
Из буханки хлеба и… Ну вы поняли. Афтор, я читал вас еще на васме, шикарный подход — но не оставлял вопрос: нафея? Я понимаю, ембед-сервер на асме для «мелких» железяк, но тут… Оставьте вы лавры пхпшнегам, делайте свое дело. Какой оптимайз на асме, коли у меня на кортесе третьем нгинкс с пхп5 (не поверите — «искаропки») шикарно справляются с отдачей динамики от полсотни точек телеметрии? Сам асм в руки брал последний раз два года назад — когда надо было лоадер для сегата .11 наваять для чтения памяти в режиме бутлоадера — для борьбы с пресловутой «мухой цц». Вот честно — чую, скоро нас динозавров в запас спишут. Обидно до жути — приходится приспосабливаться.
а под Inferno/Plan9/Linux/VxWorks/RTEMS ARM/MIPS/PPC это работает?
и таки да. прошу асмовый код под любой VLIW проц
=) Кто напишет на брейнфаке то же самое? Пол царства и царевну в придачу! После этого все что будет в этом блоге будет казаться детскими выходками…
мсье знает толк
хм… даешь cms на bat'никах :)
В совсем ранней юности делал чятик на чистом C. Потом уже открыл для себя все прелести Perl.
Хорошая статья. Спасибо.
Люблю ассемблер.
С CGI я впервые познакомился через perl и PHP. Потом пробовал Python.
Я люблю лёгкий и быстрый веб, долгое время искал дял себя тулкиты, писал CMS, а потом начал писать на Си.
Ну и естественно решил опробовать его для Web. Итогом стала библиотека для веб разработки. Весит меньше 80Кб. Содержит в себе встроенный веб сервер, который я использую как бэкенд. Парсит переменные POST, GET, Cookies, HTTP заголовки. Содержит лёгкий шаблонизатор. Свой сайт так и пишу на нём. Начал на днях разработку новой библиотеки, куда буду включать готовые модули: авторизация, рассылки, баг треккер и т.п.
Люблю ассемблер.
С CGI я впервые познакомился через perl и PHP. Потом пробовал Python.
Я люблю лёгкий и быстрый веб, долгое время искал дял себя тулкиты, писал CMS, а потом начал писать на Си.
Ну и естественно решил опробовать его для Web. Итогом стала библиотека для веб разработки. Весит меньше 80Кб. Содержит в себе встроенный веб сервер, который я использую как бэкенд. Парсит переменные POST, GET, Cookies, HTTP заголовки. Содержит лёгкий шаблонизатор. Свой сайт так и пишу на нём. Начал на днях разработку новой библиотеки, куда буду включать готовые модули: авторизация, рассылки, баг треккер и т.п.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
CGI-программирование на ассемблере?!? – Легко!