2008-09-15 12 views
23

Cómo decidir si usar hilos o crear un proceso separado en su aplicación para lograr el paralelismo.Proceso vs Hilos

Respuesta

15

hilos son de peso más ligero, y para los varios "trabajadores" que hacen sólo para utilizar todas las CPU availabe o núcleos, es mejor con los hilos.

Cuando necesita que los trabajadores estén mejor aislados y más robustos, como con la mayoría de los servidores, vaya con enchufes. Cuando un hilo se cuelga mal, normalmente elimina todo el proceso, incluidos otros hilos que trabajan en ese proceso. Si un proceso se vuelve agrio y muere, no toca ningún otro proceso, por lo que pueden continuar felizmente con su negocio como si nada hubiera sucedido.

2

Por lo general, debe usar procesos cuando las secuencias de ejecución individuales no necesitan compartir datos globales y le gustaría tener cada uno protegido del otro.

4

El grado de paralelismo depende principalmente de los procesadores físicos/núcleos disponibles en su máquina. Si tiene un solo procesador/máquina central, tener procesos separados puede causar demasiada carga. Los hilos generalmente serían preferidos en ese caso.

Si tiene múltiples núcleos/CPU, dependiendo de lo que hace cada proceso/subproceso, puede optar por los procesos si la sobrecarga está justificada. Los procesos obviamente tienen un nivel mucho mejor de aislamiento de memoria que los hilos, pero al mismo tiempo en Windows, los procesos son bastante pesados, en comparación con los hilos.

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

1

En Windows, los procesos son más pesados ​​para crear hilos. Entonces, si tienes varias tareas más pequeñas, un hilo o grupo de hilos sería mejor. O use un grupo de procesos para reciclar los procesos. También compartir estado entre procesos es más trabajo que compartir estado entre hilos. Pero, de nuevo: los hilos podrían desestabilizar un proceso completo y llevar otros hilos hacia abajo. Si quiere minimizar la posibilidad de que eso suceda, podría ir por procesos separados. AppDomains de .Net podría ser un término medio entre ambos.

5

Los procesos tienen memoria más aislada. Esto es importante por una serie de razones:

  • Es más difícil que una sola tarea bloquee las otras tareas.
  • Más memoria estará 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 mapeados en memoria.
Cuestiones relacionadas