Lo que han dicho los demás es correcto. La biblioteca "vieja E/S" de Java en java.io contiene llamadas de bloqueo. Pero ellos no están ocupados esperando. Están bloqueando en E/S y el kernel los reprogramará una vez más E/S está disponible.
No estaba del todo seguro, así que lo probé por mi cuenta. Tome esta clase de ejemplo:
import java.io.*;
public class Test {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String line = reader.readLine();
System.out.println(line);
}
}
Y compílelo en la línea de comando. Entonces ejecútelo, pero no escriba nada. El programa debe estar bloqueando la entrada hasta que escriba un carácter, y no avanzará más allá de la línea de lectura hasta que escriba enter. ps
debería poder decirnos más detalles sobre este proceso. Usar la bandera a
para obtener información más detallada de ps
:
[email protected]<computer-name>] ps a
PID TT STAT TIME COMMAND
3846 s000 S 0:00.16 -zsh
3992 s000 S+ 0:00.40 /usr/bin/java Test
La página del manual para PS dice:
estado El estado está dada por una secuencia de caracteres , por ejemplo, `` RWNA ''. El primer carácter indica el estado de ejecución del proceso :
- I marcas de un proceso que está en reposo (dormir durante más de aproximadamente 20 segundos).
- R Marca un proceso ejecutable.
- S Marca un proceso que está durmiendo durante menos de aproximadamente 20 segundos.
Y como acabo de comenzar el proceso, S tiene sentido. El proceso está durmiendo, esperando la programación del sistema operativo. De hecho, si marca top
, notará que el proceso está tomando 0% de CPU.
Así que no se preocupe por el rendimiento de esta llamada, no hay espera ocupada ni sondeos: el sistema se está ocupando de los eventos de E/S por usted y manejará de forma inteligente su proceso.
¿Alguna de estas respuestas explica suficientemente su pregunta? Si es así, probablemente debería marcar uno como su respuesta aceptada. Si no, solo edita tu pregunta para deletrear lo que aún no está claro. – jasonmp85