pthread_join pthread_create pthread linux multithreading unix pthreads

linux - pthread_create - Hilos preferenciales Vs Hilos no preferenciales



pthreads php (3)

  1. No, tu entendimiento no es del todo correcto. Los subprocesos no preventivos (también conocidos como cooperativos) suelen ceder manualmente el control para permitir que otros subprocesos se ejecuten antes de que terminen (aunque depende de ese subproceso llamar a yield() (o lo que sea) para que eso suceda.
  2. El enhebrado preventivo es más simple. Los hilos cooperativos tienen menos sobrecarga.
  3. Normalmente use preventivo. Si encuentra que su diseño tiene una gran cantidad de sobrecarga de conmutación de hilos, los hilos cooperativos serían una posible optimización. En muchas (¿la mayoría?) Situaciones, esta será una inversión bastante grande con una rentabilidad mínima.
  4. Sí, de forma predeterminada obtendría subprocesamiento, aunque si busca el paquete CThreads, admite el enhebrado cooperativo. Pocas personas (ahora) quieren hilos de cooperación que no estoy seguro de que se haya actualizado en la última década, aunque ...

¿Puede alguien explicar la diferencia entre el modelo Threading preventivo y el modelo Threading no preventivo?

Según mi entendimiento:

  • Modelo de subprocesamiento no anticipativo: una vez que se inicia un subproceso, no se puede detener o el control no se puede transferir a otros subprocesos hasta que el subproceso haya completado su tarea.
  • Modelo de enhebrado preventivo: el tiempo de ejecución permite intervenir y controlar manualmente de un hilo a otro en cualquier momento. Los subprocesos de prioridad más alta tienen precedencia sobre los subprocesos de prioridad más baja.

Alguien puede por favor

  1. Explique si la comprensión es correcta.
  2. Explica las ventajas y desventajas de ambos modelos.
  3. Un ejemplo de cuándo usar lo que será realmente útil.
  4. Si creo un hilo en Linux (sistema v o Pthread) sin mencionar ninguna opción (¿hay alguna?) De forma predeterminada, el modelo de subprocesamiento utilizado es el modelo de subprocesamiento preventivo?

Los subprocesos no preventivos también se llaman subprocesos cooperativos. Un ejemplo de estos es POE (Perl). Otro ejemplo es el clásico Mac OS (antes de OS X). Los hilos cooperativos tienen uso exclusivo de la CPU hasta que lo abandonen. El planificador luego selecciona otro hilo para ejecutar.

Los hilos preventivos pueden renunciar voluntariamente a la CPU al igual que los cooperativos, pero cuando no lo hacen, se los quitará de ellos, y el programador comenzará otro hilo. Los hilos POSIX y SysV entran en esta categoría.

Las grandes ventajas de los hilos 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 es necesario el bloqueo.

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

Puedes mezclarlos, por supuesto. Un único hilo preventivo puede tener muchos hilos cooperativos ejecutándose dentro de él.


Si usa no preventivo , no significa que el proceso no haga cambios de contexto cuando el proceso está esperando E / S. El despachador elegirá otro proceso de acuerdo con el modelo de programación. En este modelo, debemos confiar en el proceso.

no preventivo:

Interruptor de contexto 1.less = menos sobre la cabeza que puede ser sensible en el modelo no preventivo

2. Es 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 prioridad que puede ayudarnos a tener más control en el proceso de ejecución

2. podemos ver la mejor concurrencia

3. podemos manejar una llamada al sistema sin bloquear todo el sistema

Desventaja:

1.Necesitamos un algoritmo complejo para el bloqueo y tenemos un problema de sección crítica que debe manejarse

2. A menudo, una gran sobrecarga que debemos pagar