Pregunta

Cómo decidir si usar subprocesos o crear un proceso completamente separado en su aplicación para lograr el paralelismo.

¿Fue útil?

Solución

Los subprocesos son más livianos y, para crear varios "trabajadores" solo para utilizar todas las CPU o núcleos disponibles, es mejor utilizar subprocesos.

Cuando necesite que los trabajadores estén mejor aislados y sean más robustos, como ocurre con la mayoría de los servidores, opte por los sockets.Cuando un subproceso falla gravemente, generalmente interrumpe todo el proceso, incluidos otros subprocesos que trabajan en ese proceso.Si un proceso se vuelve amargo y muere, no afecta a ningún otro proceso, por lo que pueden continuar felizmente con su negocio como si nada hubiera pasado.

Otros consejos

Los procesos tienen memoria más aislada.Esto es importante por varias razones:

  • Es más difícil que una sola tarea bloquee las otras tareas.
  • Habrá más memoria disponible por proceso.Esto es importante para aplicaciones grandes y de alto rendimiento como Apache o servidores de bases de datos, como Postgres.Esto es importante tanto para la memoria asignada como para los archivos asignados en memoria.

El grado de paralelismo depende principalmente de los procesadores/núcleos físicos disponibles en su máquina.Si tiene una máquina con un solo procesador/núcleo, tener procesos separados puede causar demasiada sobrecarga.En ese caso, generalmente se preferirían los hilos.

Si tiene varios núcleos/CPU, dependiendo de lo que haga cada proceso/hilo, puede optar por procesos si la sobrecarga está justificada.Obviamente, los procesos tienen un nivel de aislamiento de memoria mucho mejor que los subprocesos, pero al mismo tiempo en Windows, los procesos son bastante pesados ​​en comparación con los subprocesos.

Por supuesto, los subprocesos pueden compartir datos en el mismo proceso, pero nuevamente necesitaría sincronizar el acceso a los datos compartidos para evitar un estado corrupto.Compartir datos entre procesos es más complicado, la sobrecarga (que es mayor que la simple sincronización de subprocesos) depende de los mecanismos utilizados, como canalizaciones con nombre, comunicación basada en sockets personalizados, uso de un marco de comunicación remota, archivos/bases de datos compartidos, etc.

Generalmente, debe utilizar procesos cuando los flujos de ejecución individuales no necesitan compartir datos globales y le gustaría tener cada uno protegido del otro.

En Windows, los procesos son más difíciles de crear que los subprocesos.Entonces, si tiene varias tareas más pequeñas, sería mejor un subproceso o un grupo de subprocesos.O utilice un grupo de procesos para reciclar los procesos.Además, compartir el estado entre procesos es más trabajo que compartir el estado entre subprocesos.Pero entonces de nuevo:Los subprocesos podrían desestabilizar un proceso completo y arrastrar consigo otros subprocesos.Si desea minimizar la posibilidad de que eso suceda, puede optar por procesos separados.AppDomains de .Net podría ser un término medio entre ambos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top