Bienvenidos sean a este post, hoy hablaremos un poco sobre como son los procesos.
Los procesos son normalmente mas complejos que un thread, por lo general contiene un thread principal pero incluso puede ser multithread si se elige, dado que son capaces de generar multiples sub-threads, donde cada cual contiene su propio set de registros y una pila (stack), cada proceso provee todos los recursos que el ordenador necesita para ejecutar el programa.
De forma similar a usar multithreading podemos diseñar nuestro codigo para que saque provecho del multiprocesamiento. Cuando hablamos de multiprocesos equivale a correr sobre varios nucleos, por lo tanto con multiprocesamiento puedes realmente paralelizar computos, sin embargo las huellas de memoria son un poco mas pesadas que las sub-threads y el otro inconveniente de usar multiples procesos es que la comunicacion entre procesos (IPC por sus siglas en ingles) tiende a ser mas costosa que entre threads.
Propiedades de un proceso
Un proceso UNIX es creado por el sistema operativo y usualmente contiene lo siguiente:
- Un ID de proceso, ID de grupo de proceso, ID de usuario o ID de grupo
- Un entorno y directorio de trabajo
- Instrucciones del programa
- Registro, una pila (stack) y monton (heap)
- Descriptores de archivo
- Acciones de señal
- Librerias compartidas
- Herramientas de IPC (pipes, colas de mensajes, semaforos o memoria compartida)
Si sienten curiosidad sobre los procesos pueden abrir una terminal e ingresar el siguiente comando:
$ top
Este comando muestra y actualiza informacion ordenada sobre todos los procesos que estan corriendo en el sistema, veamos un ejemplo:
top - 08:47:42 up 1:03, 1 user, load average: 0,08, 0,04, 0,06
Tasks: 133 total, 1 running, 132 sleeping, 0 stopped, 0 zombie
%Cpu(s): 18,2 us, 0,0 sy, 0,0 ni, 81,8 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
MiB Mem : 1995,4 total, 740,2 free, 699,1 used, 556,1 buff/cache
MiB Swap: 975,0 total, 975,0 free, 0,0 used. 1138,9 avail Mem
Esto es solo una parte de todo lo que devuelve y es para hacerse una idea de todo lo que sucede en el sistema operativo y nosotros ignoramos.
Multithread o multiproceso?
Con lo visto en posts anteriores y aqui, decidir cual es el mejor enfoque significa comprender el tipo de trabajo que se debe realizar y conocer el sistema que se dedicara a este trabajo, hay ventajas para ambos enfoques y para ello vamos a clarificar las principales diferencias, hablemos primero sobre multithread:
- Los threads nacen todos en el mismo proceso, comparten los mismos recursos y se pueden comunicar entre ellos facilmente, las comunicaciones entre procesos son muchas mas complejas en comparacion.
- La sobrecarga para generar un thread es menor que la de un proceso, ademas el espacio en memoria es mucho menor
- Los threads pueden ser muy eficaces para bloquear aplicaciones vinculadas a IO, por ejemplo mientras un thread esta bloqueado a la espera de una conexion de red que devuelva algunos datos, el trabajo se puede cambiar de manera facil y efectiva a otro thread
- Como no hay recursos compartidos entre procesos necesitamos utilizar tecnicas de IPC y requieren mas memoria que la comunicacion entre threads
Pasemos a hablar sobre algunas ventajas del multiproceso:
- Podemos evitar las limitaciones de GIL con el uso de procesos
- Los sub-procesos que fallan no mataran a la aplicacion principal
- Los threads sufren problemas como las race conditions o los deadlocks, mientras se utilizan procesos la posibilidad de lidiar con estos se reduce en gran medida
- Los cambios de contexto de threads puede resultar bastante caro cuando su cantidad esta por encima de un cierto umbral
- Los procesos pueden hacer mejor uso de los procesadores multi nucleos
- Los procesos son mejor que multiples threads para manejar multiples tareas de CPU
Un poco mas adelante veremos unos ejemplos para dejar mas en claro estos conceptos hablados.
En resumen, hoy hemos hablado de los procesos, que son, como se componen, como podemos verlo, por ultimo hemos visto las ventajas de los multiprocesos y de los multithreads, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.50
