Esto podría ser una pregunta estúpida, pero ¿cómo funcionan las funciones sleep()
, wait()
, pause()
?¿Cómo funciona sleep()?
Respuesta
Podemos ver la operación de dormir desde un punto de vista más abstracto: es una operación que le permite esperar un evento.
El evento en cuestión se desencadena cuando el tiempo transcurrido desde la invocación sleep
supera el parámetro de suspensión.
Cuando un proceso está activo (es decir: posee una CPU) se puede esperar para un evento en una activo o de una manera pasiva:
una espera activa es cuando un proceso activamente/espera explícitamente para el evento:
sleep(t): while not [event: elapsedTime > t ]: NOP // no operatior - do nothing
Este es un algoritmo trivial y puede ser implementado en cualquier parte una manera portátil, pero tiene el problema de que, si bien el proceso está esperando activamente todavía es propietario de la CPU, desperdiciando (ya que su proceso de doesn Realmente necesita la CPU, mientras que otras tareas podrían necesitarla).
Por lo general, esto debe hacerse solo por aquellos procesos que no pueden esperar de forma pasiva (consulte el punto siguiente).
Una espera pasiva en cambio se hace preguntando a otra cosa para que te despierte cuando ocurra el evento, y la suspensión de sí mismo (es decir: la liberación de la CPU):
sleep(t): system.wakeMeUpWhen([event: elapsedTime > t ]) release CPU
Con el fin de poner en práctica una espera pasiva necesita algo de soporte externo: debe poder liberar su CPU y pedirle a alguien que lo despierte cuando ocurra el evento.
Esto podría no ser posible en dispositivos de una sola tarea (como muchos dispositivos integrados) a menos que el hardware proporcione una operación
wakeMeUpWhen
, ya que no hay nadie para liberar la CPU o pedir que se despertara.x86 procesadores (y la mayoría de los demás) ofrecen una operación HLT que permite que la CPU duerma hasta que se active una interrupción externa. De esta forma también los núcleos del sistema operativo pueden dormir para mantener la CPU fresca.
Gracias. No sabía que diferentes CPU y sistemas operativos lo manejaban de manera diferente ... – Blender
Se trata de llamadas al sistema. Busque la implementación en código de código abierto como en Linux o Open BSD.
Los ejemplos son ['nanosleep (2)'] (http://linux.die.net/man/2/ nanosleep) y ['sleep (3)'] (http://linux.die.net/man/3/sleep) documentación para Linux –
+1 gracias por los enlaces ... :-) –
Los sistemas operativos modernos son multitarea, lo que significa que parece ejecutar múltiples programas simultáneamente. De hecho, su computadora solamente (tradicionalmente, al menos) solo tiene una CPU, por lo que solo puede ejecutar una instrucción de un programa al mismo tiempo.
La forma en que el sistema operativo hace que parezca que varias cosas (estás navegando en la web, escuchando música y descargando archivos) está sucediendo a la vez es ejecutando cada tarea por un tiempo muy corto (digamos 10 ms). Este cambio rápido hace que parezca que las cosas suceden simultáneamente cuando todo está sucediendo secuencialmente. (con diferencias obvias para el sistema multi-core).
En cuanto a la respuesta a la pregunta: con sleep o wait o IO sincrónico, el programa básicamente le dice al SO que ejecute otras tareas, y no me ejecute hasta que: X ms haya transcurrido, el evento haya sido señalado, o los datos están listos.
- 1. PHP sleep() no funciona
- 2. VBA Sleep no funciona
- 3. Cómo std :: thread sleep
- 4. sleep() en Javascript
- 5. sleep-until in C#
- 6. RSpec: stubbing Kernel :: sleep?
- 7. salida php con sleep()
- 8. Action Script Sleep function
- 9. pthread sleep linux
- 10. Uso de la función Sleep()
- 11. ¿Qué significa boost :: thread sleep() do?
- 12. sleep() silencia silenciosamente la CPU
- 13. Thread sleep y thread join
- 14. Command to Sleep Pantalla OSX
- 15. ¿Cuál es el algoritmo detrás de sleep()?
- 16. Backgroundworker Sleep para reducir la CPU
- 17. ¿Cómo y cuándo usar SLEEP() correctamente en MySQL?
- 18. ¿Cómo se implementa sleep en el nivel del sistema operativo?
- 19. Timer & TimerTask versus Thread + sleep en Java
- 20. sleep del hilo principal está lanzando InterruptedException
- 21. ¿Hay una función sleep() para Android NDK?
- 22. Debo usar Sleep() o simplemente negarlos
- 23. función wait() o sleep() en jquery?
- 24. Usar sleep() e interrupt() para reutilizar thread
- 25. ¿Por qué usar select() en lugar de sleep()?
- 26. setTimeout sin bloqueo en javascript vs sleep en ruby
- 27. ¿cuál es la diferencia entre sleep(), usleep() y [NSThread sleepForTimeInterval:]?
- 28. ¿Hay una función Sleep/Pause/Wait en JavaScript?
- 29. Pitón eficiente y rápido While while while sleep()
- 30. ¿Cómo se comporta System.Timers.Timer en la aplicación WPF, después de Hibernate y Sleep?
Depende del idioma y del sistema operativo. –
implica una copa de dormir – kelloti
¡No es una pregunta estúpida en absoluto! –