2015-02-22 10 views
6

Tutto quello che riesco a trovare sono le esercitazioni su come utilizzare l'I/O sovrapposto, ma non riesco a trovare il motivo per cui viene chiamato così.Perché si chiama I/O sovrapposti?

E 'perché, ad esempio, posso leggere qualcosa da un socket e poi leggere qualcos'altro prima che necessariamente la prima lettura restituisca i byte letti?

+2

Tutti gli altri chiamano questo "I/O asincrono". – rightfold

+0

Bene, è possibile emettere una richiesta di lettura (o più richieste di lettura per gli stessi socket o diversi). La lettura effettiva verrà eseguita per te e sarai avvisato al completamento. –

+0

È perché è possibile eseguire più operazioni di I/O contemporaneamente, cioè si sovrappongono l'un l'altro. –

risposta

5

Penso che l'idea fosse (20 anni fa) che si potesse iniziare un IO, eseguire alcuni calcoli o altro lavoro e poi attendere il risultato. Questo è raramente fatto oggi. Penso che questa idea derivi da un momento in cui lo select e lo poll erano considerati lo stato dell'arte.

Un nome migliore sarebbe I/O asincrono. Questo è ciò che ogni altra piattaforma sembra chiamarlo. In fact the MSDN documentation mixes the two terms.

+0

Windows utilizza anche la frase "I/O asincrono", ad esempio https://msdn.microsoft.com/en-us/library/windows/desktop/aa365683%28v=vs.85%29.aspx –

+0

@ usr qual è lo stato attuale dell'arte oggi? Stai dicendo che 'select' e' poll' sono deprecati? – Rich

+0

@Rich non sono ufficialmente deprecati ma il modello di programmazione risultante presenta problemi di flessibilità, qualità del codice, scalabilità e prestazioni assolute. Usare epoll o kqueue non è difficile con una libreria. Non riesco a capire perché una persona informata non sceglierebbe quella via per selezionare/sondare. E poi hai ancora la possibilità di usare i thread su IO asincrono, che è un compromesso più complicato. – usr

1

operazione di sovrapposizione in Microsoft Windows non significa altro come asynchron in tutti gli altri OS-lingua.

Per attenersi all'esempio, si avvia una lettura su un socket e non si attende il successo ma si fa qualcosa di completamente diverso (magari si legge su un socket diverso (!)). Quindi chiedi se la prima operazione è finita. Puoi anche impostare un evento per questo. O dare una funzione CALLBACK che viene chiamata al completamento. In questo caso, la prima chiamata "ha sovrapposto" il resto delle operazioni.

Vedere anche wikipedia.

La mia ipotesi sul motivo per cui Microsoft è (lo era) chiamandolo sovrapposto è che non è come iniziare un thread, è più come avviare un'attività asincrona alla volta non c'era un nome standard per questo. È più simile a std::async rispetto a std::thread.

+0

'fai qualcosa di completamente diverso', beh, puoi fare la stessa cosa, se lo desideri. È possibile emettere più richieste di lettura sullo stesso o su uno o più socket diversi prima che vengano gestite tutte le notifiche di completamento. –

5

Il significato classico risale agli anni '60 (o precedente), dove I/O sovrapposti significava che più trasferimenti I/O (normalmente ogni I/O su un dispositivo diverso) potevano verificarsi contemporaneamente (come letture contemporanee dal nastro e scrive sul disco). Un nome classico alternativo per questo era I/O simultaneo. Ciò potrebbe essere realizzato tramite interrupt e/o hardware simile al DMA (in quei giorni, alcune delle implementazioni hardware DMA erano più come un insieme di piccoli trasformatori)

articolo Esempio per IBM mainframe:

Overlapped I/O - IBM

Problemi correlati