Diferencia entre pthread y fork en gnu / Linux


¿ Cuál es la diferencia básica entre un pthread y una bifurcación w.r.t. linux en términos de diferencias de implementación y cómo varía la programación (¿varía ?)

Ejecuté strace en dos programas similares, uno usando pthreads y otro usando fork, ambos al final hacen clone () syscall con diferentes argumentos, así que estoy adivinando los dos son esencialmente los mismos en un sistema linux, pero con pthreads siendo más fácil para manejar en código.

¿Puede alguien dar un profundo explicación?

EDITAR: ver también una pregunta relacionada

Author: Community, 2011-04-01

3 answers

En C hay algunas diferencias sin embargo:

Tenedor()

  • El propósito es crear un nuevo proceso, que se convierte en el proceso hijo de la persona que llama

  • Ambos procesos ejecutarán la siguiente instrucción después de la llamada al sistema fork ()

  • Se crean dos copias idénticas del espacio de direcciones,el código y la pila de la computadora, una para padres y otra para hijos.

Pensar en la bifurcación como si fuera una persona; La bifurcación causa un clon de su programa (proceso), que está ejecutando el código que copió.


Pthread_create()

  • El propósito es crear un nuevo hilo en el programa al que se le da el mismo proceso del llamante

  • Los hilos dentro del mismo proceso pueden comunicarse usando memoria compartida. (¡Ten cuidado!)

  • El segundo subproceso compartirá datos, archivos abiertos, manejadores de señal y disposiciones de señal, directorio de trabajo actual, ID de usuario y grupo. sin embargo, thread obtendrá su propia pila, ID de hilo y registros.

Continuando con la analogía; su programa (proceso) crece un segundo brazo cuando crea un nuevo hilo, conectado al mismo cerebro.

 54
Author: Gabriel Fair,
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-02-20 03:59:13

Usted debe mirar el clone manpage.

En particular, enumera todos los posibles modos de clonación y cómo afectan al proceso/hilo, espacio de memoria virtual, etc...

Dices "hilos más fáciles de manejar en código": eso es muy discutible. Escribir código multi-hilo libre de errores y sin bloqueos puede ser todo un desafío. A veces tener dos procesos separados hace las cosas mucho más simples.

 5
Author: Mat,
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-04-01 14:15:32

En Linux, la llamada al sistema clone clona una tarea, con un nivel configurable de uso compartido. fork() llama clone(least sharing) y pthread_create() llama clone(most sharing). la bifurcación cuesta un poco más que pthread_createing debido a la copia de tablas y la creación de asignaciones de VACA para la memoria.

 3
Author: Davood Hanifi,
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-10-26 05:29:03