[Python-es] Dudas sobre concurrencia: ¿fork o threads?

Miguel Araujo muchochini en gmail.com
Mie Feb 13 13:17:47 CET 2008


Hola a todos,

Estoy programando un simulador que emula una red con las primeras 3 capas.
Para ello tengo distintos procesos comunicándose entre sí por medio de
sockets UNIX. Existen dos tipos de procesos: hosts y routers. Cada proceso
host se conecta a un router que tiene sockets UNIX con una serie de
hosts/routers y una tabla de enrutamiento. Luego está a la espera de n
conexiones (El número lo conoce de antemano). El router tiene que tener
hilos o procesos para n receptores y n emisores. Ya que a la vez puede estar
recibiendo de varios procesos y enviando a varios procesos.

Por lo que el problema se complica. La pregunta que me ha surgido es cuál es
la diferencia entre crear threads o hacer forks. Es solo desde el punto de
vista de como crea el proceso el sistema operativo, todo el rollo de proceso
ligero o pesado, copy on write de memoria o duplicación de regiones... ¿Da
igual si lo hago con threads o forks? ¿alguna diferencia real? ¿es uno más
fácil que otro?

Si un router recibe un mensaje del proceso A y lo tiene que enviar al B, se
supone que por medio de un pipe, fichero con lock o lo que sea le tiene que
comunicar esta información. No hay ninguna otra forma de hacerlo que no me
obligue a mantener conexiones entre todos los threads de mi router?

Muchas gracias por leeros esta parrafada, pero es que necesito ayuda porque
el grado de concurrencia y comunicación entre procesos es brutal.

Saludos
     Miguel


Más información sobre la lista de distribución Python-es