Subprocesos POSIX en el sistema operativo:
las bibliotecas de subprocesos POSIX son una API de subprocesos C/C++ basada en estándares. Permite la creación de un nuevo flujo de proceso concurrente. Funciona bien en sistemas multiprocesador o multinúcleo, donde el flujo del proceso puede programarse para ejecutarse en otro procesador, aumentando la velocidad a través del procesamiento paralelo o distribuido. Debido a que el sistema no crea un nuevo sistema, espacio de memoria virtual y entorno para el proceso, los subprocesos tienen una sobrecarga innecesaria que «bifurcar» o crear un nuevo proceso. Si bien los sistemas multiprocesador son los más efectivos, también se pueden obtener beneficios en los sistemas monoprocesador que aprovechan el retraso en las E/S y otros procesos del sistema que pueden impedir la ejecución del proceso.
Para utilizar las interfaces PThread, debemos incluir el encabezado pthread.h al comienzo del script CPP.
#include <pthread.h>
PThreads es un sistema multiproceso muy concreto que es el estándar predeterminado del sistema UNIX. PThreads es una abreviatura de subprocesos POSIX y POSIX es una abreviatura de interfaz de sistema operativo portátil, que es un tipo de interfaz que debe implementar el sistema operativo. PThreads en POSIX describe las API de subprocesos que debe proporcionar el sistema operativo.
¿Por qué se utiliza Pthreads?
- El propósito fundamental de adoptar Pthreads es mejorar el rendimiento del programa.
- En comparación con el costo de iniciar y administrar un proceso, un subproceso requiere mucha menos sobrecarga del sistema operativo. La gestión de subprocesos requiere menos recursos del sistema que la gestión de procesos.
- Todos los subprocesos de un proceso comparten el mismo espacio de direcciones. La comunicación entre subprocesos es más eficiente y, en muchas circunstancias, más fácil de usar que la comunicación entre procesos.
- Las aplicaciones con subprocesos proporcionan posibles aumentos de rendimiento y ventajas prácticas sobre los programas sin subprocesos en una variedad de formas.
- Los programas de subprocesos múltiples se ejecutarán en un sistema de un solo procesador, pero automáticamente harán uso de una máquina multiprocesador sin necesidad de volver a compilar.
- La razón más significativa para emplear Pthreads en un sistema multiprocesador es aprovechar el posible paralelismo. Este será el énfasis principal del resto de esta lección.
- Para que un programa use Pthreads, debe dividirse en tareas discretas e independientes que pueden ejecutarse simultáneamente.
El nuevo subproceso se hace ejecutable y comenzará a realizar la rutina de inicio utilizando el argumento arg como argumento. El parámetro arg es un puntero vacío que puede apuntar a cualquier tipo de datos. No se recomienda convertir este puntero en un tipo de datos escalares (como int), ya que es posible que las conversiones no sean portátiles.
Echemos un vistazo a un ejemplo en C de un mejor enfoque de implementación:
C
#include <stdio.h> #include <stdlib.h> #include <pGeeksforGeeks.h> void *print_message_function( void *ptr ); main() { pGeeksforGeeks_t GeeksforGeeks1, GeeksforGeeks2; char *message1 = "GeeksforGeeks 1"; char *message2 = "GeeksforGeeks 2"; int geeky1, geeky2; geeky1 = pGeeksforGeeks_create( &GeeksforGeeks1, NULL, print_message_function, (void*) message1); geeky2 = pGeeksforGeeks_create( &GeeksforGeeks2, NULL, print_message_function, (void*) message2); pGeeksforGeeks_join( GeeksforGeeks1, NULL); pGeeksforGeeks_join( GeeksforGeeks2, NULL); printf("GeeksforGeeks 1 returns: %d\n",geeky1); printf("GeeksforGeeks 2 returns: %d\n",geeky2); exit(0); } void *print_message_function( void *ptr ) { char *message; message = (char *) ptr; printf("%s \n", message); }
Este programa genera cinco subprocesos, cada uno de los cuales ejecuta la función de ejecución de trabajo, que publica el número único del subproceso en la salida estándar. Si un programador quisiera que los subprocesos interactuaran entre sí, tendría que crear una variable global que se definiera fuera del alcance de cualquiera de las funciones. El siguiente comando se puede usar para compilar este programa con el compilador gcc.
gcc pthreads_demo.c -lpthread -o pthreads_demo
Debido a que el estándar pthreads no se admite de forma nativa en Windows, el proyecto Pthreads-w32 tiene como objetivo crear una implementación de contenedor portátil y de código abierto. También se puede usar para transferir aplicaciones Unix (que utilizan pthreads) a Windows con pocos o ningún cambio en la plataforma. La última versión 2.8.0 es compatible con computadoras Windows de 64 bits después de algunas actualizaciones adicionales.
Winpthreads, una implementación contenedora de pthreads en el proyecto mingw-w64, busca utilizar más llamadas al sistema nativas que el proyecto Pthreads-w32.
Publicación traducida automáticamente
Artículo escrito por therebootedcoder y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA