[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: squid y reducir sus 18 hijos!!!



	Cada thread Linux (esto es, cada thread "montado" sobre
LinuxThreads) tiene un PID (identificador de proceso) distinto.

	Por ejemplo, aquí tienes la salida de ps para un programa con 
varios threads:

cacharro(jgb)-jgb> ps af
  PID TTY STAT TIME COMMAND
  441  p4 S    0:00 bash 
  462  p4 S    1:03  \_ xemacs 
  541  p4 S    0:00  \_ ./example_chat2 
  542  p4 S    0:00      \_ ./example_chat2 
  543  p4 S    0:00          \_ ./example_chat2 

	Puedes ver que tengo una bash, desde la que lanzo un xemacs y
también un example_chat2. Ese programa, a su vez, genera varios
threads (procesos ligeros, que comparten el mismo espacio de
direcciones, y por tanto, la misma memoria, descriptores de
dispositivos, etc.), que son los de PID 542 y 543.

	En Unix (y en Linux también) cada proceso tiene su propio
espacio de direcciones. Para pasar de un proceso a otro, el kernel ha
de realizar un "cambio de contexto", que es una operación
relativamente costosa (hay que cambiar dominios de protección, hacer
flush de los bloques de registros del procesador, y algunas cosas
más). Para poder hacer esos cambios de contexto más rápidamente, se
usan threads. Los threads son simplemente "actividades" o "hilos de
control" que comparten los recursos de un proceso. Como usan la misma
memoria, etc, no hay que hacer esas operaciones costoas para hacer el
cambio de un thread a otro, y el cambio es mucho más ligero (y
rápido). A veces los threads se implementan en el kernel (es el caso
de Linux con LinuxThreads), y en ese caso es relativamente habitual
darle a cada thread un PID distinto.

	No sé si esto queda algo más claro...

	Que sea leve,

		Jesus.
	
Antonio Castro writes:
 > [...]
 > Los threads generan procesos ? Estamos hablando de procesos con distinto PID.
 > 
 > Que alguien me aclare si los trheads en Linux generan procesos con PIDs 
 > distintos yo jamás he programado con threads pero tenía entendido que la
 > única forma de generar un nuevo proceso era mediante fork().
 > 
 > Los trheads pensaba que eran hilos de ejecución distintos en paralelo dentro
 > de un mismo proceso.
 > 
 > Saludos 

-- 
Jesus M. Gonzalez Barahona             | Universidad Rey Juan Carlos
jgb@gsyc.escet.urjc.es                 | ESCET
jgb@computer.org                       | c/ Tulipan s/n
Grupo de Sistemas y Comunicaciones     | 28933 Mostoles, Spain


Reply to: