GNU/Linux >> Tutoriales Linux >  >> Linux

Subprocesos preventivos Vs subprocesos no preventivos

  1. No, tu interpretación no es del todo correcta. Los subprocesos no preventivos (también conocidos como cooperativos) suelen ceder manualmente el control para permitir que otros subprocesos se ejecuten antes de que finalicen (aunque depende de ese subproceso llamar a yield() (o lo que sea) para que eso suceda.
  2. Apropiarse de subprocesos es más simple. Los subprocesos cooperativos tienen menos gastos generales.
  3. Normalmente se usa el preventivo. Si encuentra que su diseño tiene mucha sobrecarga de cambio de subprocesos, los subprocesos cooperativos serían una posible optimización. Sin embargo, en muchas (¿la mayoría?) situaciones, esta será una inversión bastante grande con una recompensa mínima.
  4. Sí, de forma predeterminada, obtendría subprocesos preventivos, aunque si busca el paquete CThreads, es compatible con subprocesos cooperativos. Pocas personas (ahora) quieren hilos cooperativos que, aunque no estoy seguro de que se hayan actualizado en la última década...

Los subprocesos no preventivos también se denominan subprocesos cooperativos. Un ejemplo de estos es POE (Perl). Otro ejemplo es el Mac OS clásico (antes de OS X). Los subprocesos cooperativos tienen uso exclusivo de la CPU hasta que la abandonan. Luego, el planificador elige otro subproceso para ejecutar.

Los subprocesos preventivos pueden renunciar voluntariamente a la CPU al igual que los cooperativos, pero cuando no lo hacen, se les quitará y el programador iniciará otro subproceso. Los subprocesos POSIX y SysV entran en esta categoría.

Las grandes ventajas de los subprocesos cooperativos son una mayor eficiencia (en máquinas de un solo núcleo, al menos) y un manejo más fácil de la concurrencia:solo existe cuando cede el control, por lo que no se requiere bloqueo.

Las grandes ventajas de los subprocesos preventivos son una mejor tolerancia a fallas:un solo subproceso que falla en el rendimiento no detiene la ejecución de todos los demás subprocesos. También normalmente funciona mejor en máquinas de varios núcleos, ya que se ejecutan varios subprocesos a la vez. Finalmente, no tienes que preocuparte por asegurarte de estar cediendo constantemente. Eso puede ser realmente molesto en el interior, por ejemplo, un ciclo de procesamiento de números pesados.

Puedes mezclarlos, por supuesto. Un solo subproceso preventivo puede tener muchos subprocesos cooperativos ejecutándose dentro de él.


Si usa no preventivo no significa que el proceso no realice el cambio de contexto cuando el proceso está esperando E/S. El despachador elegirá otro proceso de acuerdo al modelo de programación. Tenemos que confiar en el proceso.

no preventivo:

  1. menos cambio de contexto, menos sobrecarga eso puede ser sensato en el modelo no preventivo

  2. Más fácil de manejar ya que se puede manejar en un procesador de un solo núcleo

preventivo :

Ventaja:

  1. En este modelo, tenemos una prioridad que nos ayuda a tener más control sobre el proceso en ejecución

  2. Mejor concurrencia es un rebote

  3. Manejo de llamadas al sistema sin bloquear todo el sistema

Desventaja:

  1. Requiere algoritmos más complejos para la sincronización y el manejo de secciones críticas es inevitable.

  2. Los gastos generales que conlleva


Linux
  1. Subprocesos POSIX separados vs. conectables

  2. ¿Qué significa decir que el kernel de Linux es preventivo?

  3. Pruebe si la cadena tiene caracteres que no son espacios en blanco en Bash

  4. Manejo de señales con múltiples hilos en Linux

  5. ¿Es fopen () una función segura para subprocesos en Linux?

¿Cuál es la diferencia entre los hilos NPTL y POSIX?

Renice:¿Cómo cambiar todos los hilos?

¿Los hilos del kernel de Linux son realmente procesos del kernel?

¿Puede ps mostrar solo procesos que no sean del kernel en Linux?

Algo así como YaST para distribuciones que no sean de SUSE

¿Debo intentar 'equilibrar' mis hilos o Linux hace esto?