¿Es la biblioteca Pthread realmente una solución de hilo de usuario?


El título puede no ser lo suficientemente claro porque no se como definir mis preguntas en realidad.

Entiendo que Pthread es una biblioteca de hilos que cumple con el estándar POSIX (acerca de POSIX, ver wikipedia: http://en.wikipedia.org/wiki/Posix ). Está disponible en sistemas operativos tipo Unix.

Sobre thread, leí que hay tres modelos diferentes:

Subproceso a nivel de usuario: el núcleo no lo sabe. El propio usuario crea / implementa / destruye hilo.

Subproceso a nivel del kernel: El kernel soporta directamente múltiples subprocesos de control en un proceso.

Proceso ligero(LWP): programado por el kernel pero puede ser limitado con hilos de usuario.

¿Viste mi confusión? Cuando llamo a pthread_create() para crear un subproceso, ¿creé un subproceso a nivel de usuario? Supongo que sí. Entonces, ¿puedo decir que Pthread ofrece una solución a nivel de usuario para subprocesos? No puede manipular kernel / LWP?

Author: vatsa, 2011-12-27

5 answers

P: Entiendo que Pthread es una biblioteca de hilos que cumple con el estándar POSIX

R: Sí. En realidad, "Pthreads" significa " Posix threads": http://en.wikipedia.org/wiki/Pthreads

Q: Está disponible en sistemas operativos tipo Unix.

R: En realidad, está disponible para muchos OSs diferentes ... incluyendo Windows, macOS ... y, por supuesto, Linux, BSD y Solaris.

P: Acerca de thread, he leído que hay tres diferentes modelos

Ahora te estás confundiendo. "Hilos" es un término muy genérico. Hay muchos, muchos modelos diferentes. Y muchas, muchas maneras diferentes de caracterizar y / o implementar "hilos". Incluyendo cosas como el modelo Java threading, o el modelo Ada threading.

P: Cuando llamo a pthread_create () para crear un hilo, ¿creé un nivel de usuario hilo?

R: Sí: Casi todo lo que haces en el espacio de usuario está "protegido" en tu propio "usuario" privado espacio".

Q: Hilo de nivel de usuario: el núcleo no lo sabe.

A: No. El núcleo sabe todo :)

Q: Hilo de nivel del kernel: el kernel soporta directamente múltiples hilos de control en un proceso.

R: Sí, existe tal cosa como "hilos de kernel".

Y, como sucede, Linux hace un uso extensivo de los hilos del kernel. Por ejemplo, cada proceso en un sistema Linux es un "hilo de núcleo". Y cada pthread creado por el usuario TAMBIÉN se implementa como un nuevo "hilo de kernel". Al igual que los "hilos de trabajo" (que son completamente invisibles para cualquier proceso a nivel de usuario).

Pero este es un tema avanzado que NO necesita entender para usar de manera efectiva pthreads. Aquí hay un gran libro que discutió esto - y muchos otros temas-en detalle:

Desarrollo del Kernel de Linux, Robert Love

Recuerde: "Pthreads" es una interfaz. Cómo se implementa depende de la plataforma. Linux usa hilos del núcleo; Windows usa hilos de Win32, etc.

 21
Author: paulsm4,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-26 21:35:31

@paulsm4 Tengo dudas sobre su comentario de que kernel lo sabe todo. En este contexto particular de subprocesos a nivel de usuario, el núcleo no es consciente del hecho de que tal cosa está sucediendo. La programación de un subproceso a nivel de usuario es mantenida por el propio usuario (a través de la interfaz proporcionada por una biblioteca) y el núcleo termina asignando solo un subproceso de núcleo a todo el proceso. Kernel trataría el proceso como un único subproceso y cualquier llamada de bloqueo por uno de los subprocesos terminaría bloqueando todos los hilos de ese proceso. Refiérase a http://www.personal.kent.edu / ~rmuhamma/OpSystems/Myos/threads.htm

 29
Author: pareshverma91,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-28 23:45:33

Pthreads, per se, no es realmente una biblioteca de threading. pthreads es la interfaz que implementa una biblioteca de subprocesos específica, utilizando los recursos de concurrencia disponibles en esa plataforma. Así que hay una implementación de pthreads en linux, en bsd, en solaris, etc., y mientras que la interfaz (los archivos de cabecera y el significado de las llamadas) es la misma, la implementación de cada uno es diferente.

Así que lo que pthread_create realmente hace, en términos de objetos de hilo del núcleo, varía entre los sistemas operativos y las implementaciones de la biblioteca pthread. En una primera aproximación, no necesitas saber (eso es algo que la abstracción de pthread te permite no necesitar saber). Eventualmente, es posible que necesite ver "detrás de la cortina", pero para la mayoría de los usuarios de pthread eso no es necesario.

Si desea saber qué hace una implementación /specific/ pthread, en un sistema operativo específico, deberá aclarar su pregunta. Lo que Solaris y Linux hacen, por ejemplo, es muy diferente.

 10
Author: FIn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-26 21:30:26

En Linux, pthread es implementado como un proceso ligero. Kernel (v2. 6+) está realmente implementado con NPTL. Permítanme citar el contenido wiki:

NPTL es una llamada biblioteca de subprocesos 1×1, en la que los subprocesos creados por el usuario (a través de la función de biblioteca pthread_create ()) están en correspondencia 1-1 con entidades programables en el núcleo (tareas, en el caso de Linux). Esta es la implementación de threading más simple posible.

Así que pthread en linux el kernel está realmente implementado como hilo del kernel.

 4
Author: Junji Zhi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 10:31:09

Pthreads es solo una interfaz estandarizada para el subproceso de bibliotecas. Si se crea un subproceso del sistema operativo o un subproceso ligero depende de la biblioteca que utilice. Sin embargo, mi primer invitado sería que sus subprocesos son subprocesos "reales" a nivel del sistema operativo.

 0
Author: Eser Aygün,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-26 21:28:03