He echado un vistazo a las fuentes de FastCGI (fcgi-2.4.0) y en realidad no hay señales de fork. Si estoy en lo correcto, el servidor web spwans un proceso para el módulo FastCGI (compilado en él o cargado como SO/DLL) y maneja el control del socket principal (el puerto TCP: 80 por lo general) a él.¿Cómo funciona FastCGI en un servidor web (por ejemplo, Apache 2.2+)?
En * nix el módulo FastCGI "bloquea" ese socket utilizando un bloqueo de escritura de archivo (libfcgi/os_unix.c: 989) en todo el descriptor de archivo (el socket de escucha de hecho); De esta forma, cuando las nuevas conexiones generan ingresos, solo el módulo FastCGI puede procesarlas. El bloqueo del socket entrante se libera justo antes de entregarlo al procesamiento HTTP req.
Como se ve como módulo FastCGI no es de múltiples proceso/hilo (sin uso interno de tenedor/pthread_create) Asumo se obtiene el manejo simultáneo de varias conexiones simultáneas a través de desove de desde el servidor web (a través de OS_SpawnChild) de n FastCGI procesos de módulo. Si engendramos, por ejemplo, 3 procesos FastCGI (Apache llama a 3 x OS_SpawnChild), ¿significa eso que solo podríamos tener un máximo de 3 solicitudes atendidas simultáneamente?
A) ¿Es correcta mi visión de la manera de trabajar de FastCGI?
B) Si el costo para el sistema operativo para generar un nuevo proceso/crear una conexión a base de datos local podría considerarse insignificante, ¿cuáles son las ventajas de FastCGI en contra de un enfoque ejecutable pasada de moda ?
Gracias, Ema! :-)
Arul, gracias, pero ahora ya esto ... Estaba pidiendo respuestas más específicas (A, B). Cheers, –