2009-09-26 11 views

risposta

9

Blocco I/O significa che l'esecuzione del programma viene messa in attesa mentre l'I/O è in corso. Quindi il programma attende fino a quando l'I/O è finito e quindi continua la sua esecuzione. In I/O non bloccanti il ​​programma può continuare durante le operazioni di I/O.

+7

... ed è notificato tramite richiamata quando l'operazione IO è finita. Questo ti costringe a progettare i tuoi programmi in modo diverso, ma li renderà molto più efficaci. –

+0

@ Lex, qualsiasi esempio di operazione di blocco e non blocco? Grazie. – Kalanidhi

+1

@etc_passwd In JS è semplice da capire; una chiamata a 'alert();' sta bloccando, poiché l'esecuzione è messa in attesa fino a quando l'utente non fa clic su OK. Una chiamata AJAX è non bloccante, l'esecuzione di viene proseguita mentre viene inviata la richiesta HTTP. –

0

disse semplicemente .. il non bloccante I/O (Asynchronous) consente altre operazioni da effettuare mentre si fa la sua cosa e bloccando i/o bloccherebbe altre operazioni

4

E 'una questione di concorrenza. Nel caso normale, dopo che un kernel del SO riceve un I/O op da un programma utente, quel programma non viene eseguito nuovamente fino al completamento dell'operazione di I/O. Altri programmi vengono generalmente programmati nel frattempo.

Questo risolve molti piccoli problemi. Ad esempio, come fa un programma a sapere quanti byte sono stati letti a meno che l'I/O sia completo quando restituisce il read(2)? Come fa a sapere se può riutilizzare un buffer write(2) se l'operazione è ancora in corso quando ritorna write(2)? Ovviamente, è necessaria un'interfaccia più complessa per l'I/O asincrono.

definitiva si scende a:

  1. I/O succede sincrono rispetto al programma, bloccando il programma fino I/O è finito
  2. I/O è semplicemente programmato da una chiamata di sistema e esiste un meccanismo di notifica per comunicare il risultato reale
  3. C'è un compromesso in cui le operazioni di I/O falliscono semplicemente se non possono essere completate immediatamente. Questo è l'uso più comune di I/O "non bloccanti" nella pratica.

L'intera questione è complicata inoltre dallo sforzo di pianificare programmi multithreaded quando I/O potuto concepibilmente bloccare un solo filo, ma che è una questione diversa ...

Problemi correlati