Algunas preguntas sobre hilos y procesos.

Algunas preguntas sobre hilos y procesos.

Me hicieron estas preguntas en una entrevista (entrevista en C++). No estoy seguro de las respuestas y me gustaría saber más.

  1. ¿Puede el hilo crear otro hilo?
  2. ¿Puede el proceso crear otro proceso?
  3. ¿Puede el hilo crear un proceso?
  4. ¿Puede el proceso crear un hilo?

Respuesta1

  1. Sí, un hilo puede crear otro hilo. En UNIX esto se hace (en el nivel bajo) a través del clone()comando, y en el nivel más alto, en codificación C, a través de la pthreadbiblioteca.

  2. Sí, un proceso puede iniciar otro proceso. Esto sucede todo el tiempo. El tipo de proceso más común -> proceso es a través de fork().

  3. Esto, no estoy seguro. En este punto me gustaría mencionar que hay dos tipos principales de subprocesos: subprocesos a nivel de kernel y subprocesos a nivel de usuario. Los subprocesos a nivel de kernel (en general) están vinculados a procesos principales, mientras que los subprocesos a nivel de usuario son generados por estos procesos (es decir, mediante subprocesos a nivel de kernel).Hay excepcionesQuizás alguien pueda dar una mejor respuesta al hilo -> proceso.

  4. Sí. Ver el comentario en 3.

Respuesta2

Cualquier código que se ejecute puede hacer cualquier cosa.

Dicho esto, los procesos no son código: los subprocesos son las cosas que realmente se ejecutan y los procesos son sus entornos circundantes. Por tanto (1) y (3) son verdaderas y el resto falsas.

Respuesta3

Sí a todo.

Puede que le ayude comprender que los procesos en realidad no se "ejecutan" en Windows. Los hilos corren. Cada proceso tiene al menos un hilo. Entonces, las verdaderas preguntas son:

  • ¿La ejecución de código puede crear otro hilo? Sí.

En Windows, esto se hace con la API CreateThread o una de sus primas. La versión larga sería "¿puede el código que se ejecuta en el contexto de un hilo crear otro hilo?" Claro, pero desdetodoEl código se ejecuta en el contexto de algún hilo, no hay necesidad de palabrería adicional. CreateThread toma un argumento que es la dirección de la función que se convierte en la función de nivel superior para el nuevo hilo, esencialmente el "principal" del nuevo hilo.

  • ¿La ejecución de código puede crear otro proceso? Sí.

De manera similar a lo anterior: cuando se ejecuta en el contexto de un subproceso, también se ejecuta en el contexto del proceso propietario del subproceso. Entonces, sí, existe una API CreateProcess y puedes usarla para crear otro proceso.

También estarás, automáticamente y sin mayor esfuerzo, creando un hilo en tu nuevo proceso... porque (dado que los procesos no se ejecutan) un proceso sin un hilo no puede hacer nada. Ese primer hilo del nuevo proceso comenzará a ejecutar la función "principal" del programa: main() o WinMain() o lo que sea.

información relacionada