Ce que les autres ont dit est correct. La bibliothèque "old I/O" de Java dans java.io contient des appels bloquants. Mais ils n'attendent pas. Ils bloquent les E/S et le noyau les reprogrammera une fois de plus les E/S sont disponibles. Je n'étais pas totalement sûr, donc je l'ai essayé par moi-même. Prenez cette classe d'exemple:
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);
}
}
Et compilez-le sur la ligne de commande. Ensuite, exécutez-le, mais ne tapez rien. Le programme devrait bloquer en entrée jusqu'à ce que vous tapiez un caractère, et il ne passera pas après readline jusqu'à ce que vous tapiez enter. ps
devrait être en mesure de nous dire plus de détails à propos de ce processus. Utilisez le drapeau a
pour obtenir des informations plus détaillées 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 page de manuel pour le PS dit:
état L'état est donnée par une séquence de caractères, par exemple, "RWNA". Le premier caractère indique l'état de fonctionnement du processus :
- I Marques un processus qui est au repos (sommeil pendant plus d'environ 20 secondes).
- R Marque un processus exécutable.
- S Marque un processus qui dort pendant moins d'environ 20 secondes.
Et depuis que je viens de commencer le processus, S est logique. Le processus est en attente, en attente d'une planification par le système d'exploitation. En effet, si vous vérifiez top
, vous remarquerez que le processus prend 0% CPU.
Alors ne vous inquiétez pas pour les performances de cet appel, il n'y a pas d'attente ou d'interrogation en cours: le système s'occupe des événements d'E/S et gère intelligemment votre processus.
Certaines de ces réponses ont-elles suffisamment expliqué votre question? Si oui, vous devriez probablement en marquer une comme votre réponse acceptée. Si ce n'est pas le cas, éditez simplement votre question pour épeler ce qui n'est pas encore clair. – jasonmp85