¿Puede alguien explicar la diferencia entre el modelo de roscado preventivo y el modelo de roscado no preventivo?Hilos preventivos Vs Hilos no preceptivos
Según mi entendimiento:
- modelo de subprocesos no preventiva: Una vez que se inicia un hilo que no se puede detener o el control no puede ser transferido a otros hilos hasta que el mensaje ha completado su tarea.
- Preemptive Threading Modelo: 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.
Puede alguien por favor:
- Explicar si el entendimiento es correcto.
- Explique las ventajas y desventajas de ambos modelos.
- Un ejemplo de cuándo usar lo que será realmente útil.
- 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?
Solo una nota sobre yield(): no la use en Linux porque tiene un rendimiento horrible. Un hilo entregado se coloca en la parte posterior del programa del hilo, por lo que el hilo no se programará hasta que * todo lo demás en el sistema completo haya tenido su oportunidad. –
En mi comprensión, cuando el proceso principal crea dos hilos, se ejecutarán en paralelo. Entonces, ¿el modelo de subprocesamiento no prioritario hace que la ejecución sea similar a (final_hilo_1) -> (tema_almacenamiento_2) -> principal()? Es decir, después de que el hilo 1 finalizó por completo, el hilo 2 comenzará y luego de que se complete, el método main() llamará. ¿Es esto correcto? Si es así, ¿cuál es el uso de "hilos no preventivos"? – rakeshNS
@rakeshNS: los subprocesos no preventivos (cooperativos) significan que un subproceso se ejecuta hasta que llama a alguna función que fuerza/permite un cambio a otro subproceso. En algunos casos, esa es una función explícita de 'rendimiento'. En otros, permitir que otros hilos se ejecuten está implícito en alguna otra función.Por ejemplo, en Windows de 16 bits, cuando llamabas a 'GetMessage', podían ejecutarse otros procesos/hilos (se consideraban procesos, pero todos compartían un espacio de direcciones ...) –