Mi pregunta: ¿qué tipo de aplicación requiere tantos hilos concurrentes de ejecución?
1) El hecho de que un idioma "escale" significa que hay menos posibilidades de que abandones ese idioma cuando las cosas se vuelvan más complejas en el futuro. (Esto se llama el concepto de "Producto completo"). Muchas personas están abandonando Apache para Nginx por esta misma razón. Si estás cerca del "límite duro" impuesto por la sobrecarga del hilo, te asustarás y comenzarás a pensar en formas de superarlo. Los sitios web nunca pueden predecir cuánto tráfico obtendrán, por lo que pasar un poco de tiempo haciendo que las cosas sean escalables es razonable.
2) Una gorutina por solicitud, solo el comienzo. Hay muchas razones para usar gorutinas internamente.
- Considere una aplicación web con solicitudes simultáneas de 100, pero cada solicitud genera cientos de solicitudes de fondo. El ejemplo obvio es un agregador de motor de búsqueda. Pero casi cualquier aplicación podría crear gorutinas para cada "área" en pantalla, y luego generarlas de forma independiente en lugar de secuencialmente. Por ejemplo, cada página en Amazon.com está compuesta por más de 150 solicitudes de fondo, ensambladas solo para usted. No se da cuenta porque están en paralelo, no en secuencia, y cada "área" es su propio servicio web.
- Considere cualquier aplicación donde la confiabilidad y la latencia sean primordiales. Probablemente desee que cada solicitud entrante active algunas solicitudes de fondo y devuelva los datos que se devuelvan primero .
- Considere cualquier "cliente unirse" hecho en su aplicación. En lugar de decir "para cada elemento, obtener datos", puede escindir un montón de gorutinas. Si tiene que consultar un montón de DB esclavos, mágicamente irá N más rápido. Si no lo hace, no será más lento.
golpea rendimientos decrecientes cuando el número de subprocesos / procesos es mucho mayor que el número de núcleos físicos
El rendimiento no es la única razón para dividir un programa en CSP . En realidad, puede hacer que el programa sea más fácil de entender, y algunos problemas se pueden resolver con mucho menos código.
Como en las diapositivas vinculadas anteriormente, tener concurrencia en su código es una forma de organizar el problema. No tener gorutinas es como no tener una estructura de datos de Mapa / Dictonario / Hash en su idioma. Puedes sobrevivir sin eso. Pero una vez que lo tiene, comienza a usarlo en todas partes, y realmente simplifica su programa.
En el pasado, esto significaba "rodar su propia" programación multiproceso. Pero esto era complejo y peligroso: todavía no hay muchas herramientas para asegurarte de que no estás creando razas. ¿Y cómo evita que un futuro mantenedor cometa un error? Si observa programas grandes / complejos, verá que gastan MUCHOS recursos en esa dirección.
Dado que la concurrencia no es una parte de primera clase de la mayoría de los idiomas, los programadores de hoy tienen un punto ciego de por qué les sería útil. Esto solo se hará más evidente a medida que cada teléfono y reloj de pulsera se dirija hacia 1000 núcleos. Ve a los barcos con una herramienta de detector de carreras incorporada.