Existen tres tipos de 'servidores': bifurcación, roscado y rosca simple (sin bloqueo). En general, todos giran en la forma en que se muestran, la diferencia es lo que sucede cuando hay algo que atender.
Un servicio de horquilla es solo eso. Para cada solicitud, se invoca fork() creando un nuevo proceso hijo que maneja la solicitud, luego sale (o permanece activo, para manejar solicitudes posteriores, dependiendo del diseño).
Un servicio de subprocesamiento es como un servicio de bifurcación, pero en lugar de un proceso completamente nuevo, se crea un nuevo subproceso para atender la solicitud. Al igual que los tenedores, a veces los hilos se quedan para manejar solicitudes posteriores. La diferencia en el rendimiento y la huella es simplemente la diferencia entre los hilos y las horquillas. Dependiendo del uso de memoria que es no dando servicio a un cliente (y propenso a cambiar), generalmente es mejor no clonar todo el espacio de direcciones. La única complejidad añadida aquí es la sincronización.
Un servidor de proceso único (también conocido como un único hilo) se bifurcará solo una vez para demonizar. No generará nuevos hilos, no generará procesos secundarios. Continuará sondeando() el socket para averiguar cuándo el descriptor de archivo está listo para recibir datos o si hay datos disponibles para procesar. Los datos para cada conexión se mantienen en su propia estructura, identificados por varios estados (escritura, espera de ACK, lectura, cierre, etc.). Este puede ser un diseño extremadamente eficiente, si se hace correctamente. En lugar de bloquear varios hijos o subprocesos mientras espera para trabajar, tiene un proceso único y solicitudes de servicio de bucle de eventos cuando estén listos.
Hay instancias donde los servicios de subproceso único generan múltiples subprocesos; sin embargo, los subprocesos adicionales no funcionan para atender las solicitudes entrantes, uno podría (por ejemplo) configurar un socket local en un subproceso que permita a un administrador obtener un estado de todas las conexiones.
Un poco de google para el servidor http no bloqueante dará algunos interesantes servidores web hechos a mano escritos como desafíos de código de golf.
En resumen, la diferencia es lo que sucede una vez que se entra en el bucle sin fin, no sólo el bucle sin fin :)
No muy lejos enfrente él la verdad ..Pero la lectura es normalmente una lectura de bloqueo para el sistema, que solo regresa cuando tiene algo que devolver. Sin datos recibidos == sin ejecución. – eaanon01
@ eaanon01 - if (comando) es básicamente mi manera de decir "si se reciben datos". – Tony
..why etiquetado C? –