Ciò che gli altri hanno detto è corretto. La libreria "old I/O" di Java in java.io contiene le chiamate di blocco. Ma non sono molto occupati ad aspettare. Stanno bloccando l'I/O e il kernel ripianificherà l'I/O ancora una volta.
Non ne ero totalmente sicuro, quindi l'ho provato per me stesso. Prendi questa classe di esempio:
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);
}
}
E compilarlo sulla riga di comando. Quindi eseguilo, ma non digitare nulla. Il programma dovrebbe bloccare l'input fino a quando non si digita un carattere, e non avanzerà oltre la readline finché non si digita enter. ps
dovrebbe essere in grado di dirci maggiori dettagli su questo processo. Utilizzare il flag a
per ottenere informazioni più dettagliate da 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 pagina man per PS dice:
stato Lo stato è dato da una sequenza di caratteri , per esempio, `` RWNA ''. Il primo carattere indica lo stato di esecuzione del processo :
- I Marks un processo che è inattivo (sonno per più di circa 20 secondi).
- R Contrassegna un processo eseguibile.
- S Contrassegna un processo che sta dormendo per meno di circa 20 secondi.
E dato che ho appena iniziato il processo, S ha un senso. Il processo sta dormendo, in attesa della pianificazione da parte del sistema operativo. In effetti, se controlli top
, noterai che il processo sta prendendo il 0% di CPU.
Quindi non preoccuparti delle prestazioni di questa chiamata, non ci sono attese o polling in corso: il sistema si prende cura degli eventi I/O per te e gestirà in modo intelligente il tuo processo.
Qualcuno di queste risposte ha sufficientemente spiegato la tua domanda? Se è così, dovresti probabilmente contrassegnarne uno come risposta accettata. In caso contrario, modifica la tua domanda per spiegare cosa non è ancora chiaro. – jasonmp85