Сильно зависит от конкретной ситуации. Если памяти впритык, то отказ от Apache может дать прирост в 2-3 раза легко, только лишь из-за того что файловый кеш будет лучше работать, т.к. свободной памяти стало больше.
Вы вводите в заблуждение людей.
В nginx есть свой pool-based аллокатор. А тот что вы добавили — так это замена системному (libc), а никак «другой аллокатор nginx».
А еще decomposed unicode используется по-умолчанию в MacOSX.
Я написал модуль для прозрачного перекодирования NFD -> NFC для macosx, если кому будет полезно.
Да вариантов как-бы и нет ;-)
php делает echo, через всякие ob_извращения дело доходит до sapi->ub_write(), который в случае с mod_php равен php_apache_sapi_ub_write. Там вызывается ap_rwrite() в блокирующийся сокет. Если памяти в буфере недостаточно — ядро блокирует вызов пока вся запись не пройдет.
Можно подкрутить SendBufferSize, по идее результат должен быть такой же.
> второе не удобно для отладки (я не уверен что он всегда будет запускаться с этм кодом, а так, этот код, в него жестово вставлен)
Код сам не запускается, это вы его запускаете или не запускаете.
PS. Не надо изобретать велосипеды, используйте LD_PRELOAD. Тема исчерпана.
В nginx есть свой pool-based аллокатор. А тот что вы добавили — так это замена системному (libc), а никак «другой аллокатор nginx».
Проще его вынести в отдельную библиотеку (см freshmeat.net/projects/libhoard/ например), ну или хотя бы LD_PRELOAD модуль.
Он смог бы ускорять точно так же php, perl много еще чего ;-)
+#include <pthread.h>
+static pthread_mutex_t gen_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+#define _MALLOC_LOCK_INIT() {;}
+#define _MALLOC_LOCK() {pthread_mutex_lock(&gen_mutex);}
+#define _MALLOC_UNLOCK() {pthread_mutex_unlock(&gen_mutex);}
nginx однопоточен в настоящее время.
Я написал модуль для прозрачного перекодирования NFD -> NFC для macosx, если кому будет полезно.
code.google.com/p/nfd2nfc/
php делает echo, через всякие ob_извращения дело доходит до sapi->ub_write(), который в случае с mod_php равен php_apache_sapi_ub_write. Там вызывается ap_rwrite() в блокирующийся сокет. Если памяти в буфере недостаточно — ядро блокирует вызов пока вся запись не пройдет.
Можно подкрутить SendBufferSize, по идее результат должен быть такой же.
Непрофессионально: если между двумя действиями случится запрос — юзер увидит ошибку. Надо переименовывать symlink, это атомарно.