Solía ver Sleep(0)
en alguna parte de mi código donde hay lazos infinitos/largos while
disponibles. Me informaron que pondría el segmento de tiempo disponible para otros procesos de espera. ¿Es esto cierto? ¿Hay algún significado para Sleep(0)
?Importancia del sueño (0)
Respuesta
De acuerdo con la documentación de MSDN para Sleep:
Un valor de cero hace que el hilo para renunciar al resto de su porción de tiempo a cualquier otro hilo que es listo para funcionar. Si no hay otros subprocesos listos para ejecutarse, la función vuelve inmediatamente y la secuencia continúa la ejecución.
Lo importante es darse cuenta de que sí, esto da a otros hilos oportunidad de correr, pero si no hay ninguna lista para funcionar, a continuación, el hilo continúa - dejando el uso de la CPU al 100% desde algo siempre estará funcionando. Si su ciclo while está girando mientras espera alguna condición, puede considerar utilizar una primitiva de sincronización como un evento para dormir hasta que se cumpla la condición o dormir por un período de tiempo limitado para evitar que la CPU se maximice.
Sí, le da la oportunidad a otros subprocesos de funcionar.
Un valor de cero hace que el hilo para renunciar al resto de su porción de tiempo a cualquier otro hilo que es listo para funcionar. Si no hay otros subprocesos listos para ejecutarse, la función vuelve inmediatamente y la secuencia continúa la ejecución.
Me temo que no puedo mejorar en el MSDN docs aquí
Un valor de cero hace que el hilo para renunciar al resto de su porción de tiempo a cualquier otro hilo que es listo para funcionar. Si no hay otros subprocesos listos para ejecutarse, la función vuelve inmediatamente y la secuencia continúa la ejecución.
Windows XP/2000: Un valor de cero hace que el hilo para renunciar a la resto de su porción de tiempo a cualquier otro hilo de la misma prioridad que es listo para funcionar. Si no hay otros hilos de prioridad igual listos para ejecutar, la función vuelve inmediatamente, y el hilo continúa la ejecución. Este comportamiento se cambió a partir con Windows Server 2003.
Tenga en cuenta también (a través de upvote) las dos respuestas útiles con respecto a los problemas de eficiencia aquí.
Tenga cuidado con Sleep (0), si el tiempo de ejecución de una iteración de bucle es corto, esto puede ralentizar dicho bucle significativamente.Si esto es importante para usarlo, puede llamar a Sleep (0), por ejemplo, una vez cada 100 iteraciones.
No veo cómo podría tener sentido poner un Sleep (0) en un bucle que también se supone que es rápido. – sellibitze
sellibitze: Quiero decir, una iteración es rápida, y no todo el ciclo. –
@sellibitze: Considera el modo híbrido de dormir/ocupado-espera. Esto es bastante común para el código sensible a la temporización no crítico que no quiere encerrar a la CPU, aunque la heurística suele ser algo más sofisticado, como solo dormir si espera que la próxima fecha límite sea> n-muchos ms en el futuro . –
Sleep (0) es una herramienta poderosa y puede mejorar el rendimiento en ciertos casos. Usarlo en un ciclo rápido podría considerarse en casos especiales. Cuando un conjunto de hilos responda al máximo, todos usarán Sueño (0) con frecuencia. Pero es fundamental encontrar una regla para lo que significa respuesta en el contexto del código.
me he dado algunos detalles en https://stackoverflow.com/a/11456112/1504523
Sleep(0);
En esa instrucción, el programador del sistema verificará si hay otros subprocesos ejecutables y posiblemente darles la oportunidad de utilizar los recursos del sistema en función de las prioridades de subprocesos.
En Linux hay un comando específico para esto: sched_yield()
como de las páginas man:
sched_yield()
hace que el subproceso de llamada a renunciar a la CPU. El subproceso se mueve al final de la cola para su prioridad estática y se ejecuta un nuevo subproceso .Si el hilo que llama es el único hilo en la lista de prioridad más alta en ese momento, continuará ejecutándose después de una llamada al
sched_yield()
.
con el también
llamadas estratégicas a
sched_yield()
pueden mejorar el rendimiento, dando otros hebras o procesos oportunidad de correr cuando (en gran medida) sostuvo recursos (por ejemplo, mutex) han sido puestos en libertad por la persona que llama . evitar llamarsched_yield()
innecesariamente o inapropiadamente (por ejemplo, cuando recursos necesarios por otros temas que se pueden programar todavía están en manos de la persona que llama ), ya que al hacerlo resultará en cambios de contexto innecesarios, que degradar el rendimiento del sistema.
Y en Windows también tenemos 'SwitchToThread()' –
Estoy usando el uso de pthreads y por alguna razón en mi mac el compilador no encuentra que pthread_yield() sea declarado. Pero parece que dormir (0) es lo mismo.
En una aplicación .... el hilo principal buscaba cosas que hacer, luego lanzó el "trabajo" a través de un nuevo hilo. En este caso, debe llamar a sched_yield() (o sleep (0)) en el hilo principal, de modo que no busque "buscar" trabajo, más importante que el "trabajo". Prefiero dormir (0), pero a veces esto es excesivo (porque estás durmiendo una fracción de segundo).
- 1. Exactitud del sueño del hilo
- 2. LPC1700 no se despertará del sueño profundo
- 3. importancia del archivo <ApplicationName> _prefix.pch
- 4. Secuencia del método LINQ de alguna importancia?
- 5. python3 sueño() problema
- 6. ¿qué sueño() usa Rails?
- 7. "máquina del sueño" + + WaitForSingleObject tiempo de espera finita
- 8. ¿Despertarse del evento de sueño en el iPhone?
- 9. Cómo detectar iPhone/Android despierta del sueño con javascript
- 10. geom_wordcloud: es un sueño imposible
- 11. Importancia de PermGen espacio
- 12. java.util.regex: importancia de Pattern.compile()?
- 13. Importancia y especialidad de la función de función importancia
- 14. ¿Cuál es la importancia de una matriz de 0 longitudes en C?
- 15. importancia de liberar memoria?
- 16. 0 + 0 + 0 ... + 0! = 0
- 17. La línea de retardo imposible Javascript/sueño
- 18. ¿Cuál es la importancia del retorno por referencia?
- 19. ¿Cuál es la importancia del 12 de octubre de 1999?
- 20. Cuál es la verdadera importancia (uso) del polimorfismo
- 21. ¿Cuáles son algunas aplicaciones de importancia económica del aprendizaje automático?
- 22. Importancia de bool IsReusable en la interfaz del controlador http
- 23. Prueba de periodicidad de datos biológicos ruidosos: ¿importancia del periodograma?
- 24. ¿Cuál es la importancia del esquema en el servidor sql?
- 25. iOS 5 de prevención de sueño profundo
- 26. sueño rosca y servicios de Windows
- 27. Importancia de las interfaces C#
- 28. (objeto) == 0 (objeto) 0
- 29. Un sueño en el hilo produce pérdida de memoria
- 30. R Random Forests Importancia de la variable
Con C++ 11, tiene una mejor plataforma independiente para hacer eso: ['std :: this_thread :: yield()'] (http://en.cppreference.com/w/cpp/thread/ rendimiento)! – iammilind