Come spiegheresti un semplice mortale sul blocco dell'IO e dell'IO non bloccante? Ho trovato questi concetti non molto chiari tra molti di noi programmatori.Cosa si intende per blocco di IO e I/O non bloccante?
risposta
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.
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
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:
- I/O succede sincrono rispetto al programma, bloccando il programma fino I/O è finito
- I/O è semplicemente programmato da una chiamata di sistema e esiste un meccanismo di notifica per comunicare il risultato reale
- 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 ...
- 1. Blocco IO rispetto a IO non bloccante; alla ricerca di buoni articoli
- 2. scala attori vs thread e blocco IO
- 3. che cosa fa il "Errore di IO: Socket leggere scaduta" si intende (sviluppatori SQL)
- 4. Event Loop vs Blocco multithread IO
- 5. Haskell monade: IO [Doppia] a [IO Doppia]
- 6. Quale attività IO supporta il gestore di GHC IO?
- 7. Strutture FRP e IO
- 8. Io: protocollo 'https' non supportato
- 9. Informazioni su NodeJS e non bloccanti IO
- 10. Che cosa si intende per CookieAuthenticationOptions.AuthenticationType?
- 11. qual è la differenza tra la memoria mappata IO e IO mappato io
- 12. Mostra per tipi di IO
- 13. Interazione IO e forse monade
- 14. IO bufferizzato vs non bufferizzato
- 15. browser e socket Android io
- 16. Memoizing e ripetendo IO monadi
- 17. Qual è la differenza tra le dipendenze di maven org.apache.commons: commons-io e commons-io: commons-io?
- 18. Perché esiste un MONAD IO nidificato, IO (IO()), come valore di ritorno della mia funzione?
- 19. Cosa si intende per supporto array 2D?
- 20. Cosa si intende per Modular in Sinatra?
- 21. Cosa si intende per data-toggle = "modal"?
- 22. Converti [IO Int] in IO [Int] in Haskell?
- 23. Cosa si intende per tipo parametrizzato?
- 24. cosa (* (void (*)()) shellcode)(); si intende?
- 25. Per che cosa è la macro WITH-STANDARD-IO-SYNTAX?
- 26. Haskell e azioni IO di basso livello
- 27. subshell IO reindirizzamento
- 28. Riconnessione IO socket?
- 29. Socket IO solo sessione non persistente
- 30. Se nodejs utilizza un IO non bloccante, come viene implementato fs.readFileSync?
... 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. –
@ Lex, qualsiasi esempio di operazione di blocco e non blocco? Grazie. – Kalanidhi
@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. –