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. VBA Sleep no funciona
- 2. PHP sleep() no funciona
- 3. Cómo std :: thread sleep
- 4. sleep() en Javascript
- 5. RSpec: stubbing Kernel :: sleep?
- 6. sleep-until in C#
- 7. Action Script Sleep function
- 8. salida php con sleep()
- 9. pthread sleep linux
- 10. Uso de la función Sleep()
- 11. ¿Qué significa boost :: thread sleep() do?
- 12. Command to Sleep Pantalla OSX
- 13. Thread sleep y thread join
- 14. sleep() silencia silenciosamente la CPU
- 15. ¿Cuál es el algoritmo detrás de sleep()?
- 16. Backgroundworker Sleep para reducir la CPU
- 17. ¿Cómo se implementa sleep en el nivel del sistema operativo?
- 18. ¿Cómo y cuándo usar SLEEP() correctamente en MySQL?
- 19. Timer & TimerTask versus Thread + sleep en Java
- 20. ¿Hay una función sleep() para Android NDK?
- 21. función wait() o sleep() en jquery?
- 22. Debo usar Sleep() o simplemente negarlos
- 23. Usar sleep() e interrupt() para reutilizar thread
- 24. sleep del hilo principal está lanzando InterruptedException
- 25. ¿Por qué usar select() en lugar de sleep()?
- 26. ¿Hay una función Sleep/Pause/Wait en JavaScript?
- 27. setTimeout sin bloqueo en javascript vs sleep en ruby
- 28. Pitón eficiente y rápido While while while sleep()
- 29. ¿cuál es la diferencia entre sleep(), usleep() y [NSThread sleepForTimeInterval:]?
- 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! –