Den Tue, 05 Mar 2002 15:11:41 +0100 skrev Claus Rasmussen:
>Kent Friis wrote:
>
>> Den Tue, 5 Mar 2002 13:04:11 +0000 (UTC) skrev Christoffer H.-Frederiksen:
>>>
>>>Kan det virkelig passe, at man på en *NIX-kasse ikke kan lave non-blocking
>>>IO til en fil? Man kan på en fifo eller en socket.
>>
>> Det giver normalt ikke mening med non-blocking IO til en fil.
>
>Jo det gør. Databaser bruger det i stor stil. Dog kombineret med en
>absolut blocking skrivning til databasens log.
>
>Async-io som er på vej ind i 2.5 kernen (hvis den ikke allerede er der)
>er netop beregnet på dette (læs: Oracle). RedHat har også lavet en
>speciel udgave af deres 6.2 distribution med non-blocking io.
Jeg forstår ikke helt det samme ved non-blocking IO, som ved async-io.
Ved non-blocking IO forstår jeg filer der er åbnet med O_NONBLOCK, altså
at en læsning returnerer med det samme, uanset om der er data eller ej.
Fx. kunne man vente på data med select(), og så lave en read på 1024
bytes, og read vil så returnere de 25 bytes der lå klar, i stedet for
at vente på de sidste 999 bytes, som ikke er leveret endnu. *Det* giver
ikke mening til filer.
Ved async-io forstår jeg at man beder system foretage en læsning, og så
arbejder programmet videre. Programmet får så fx. et signal, når data
er indlæst, eller man har et wait()-lignende kald, så programmet kan
behandle data når de er indlæst.
Ved skrivning kan jeg ikke se den store fordel i nogen af delene, da
data alligevel bare ender i RAM, medmindre man bruger O_SYNC (som netop
bliver brugt til bl.a. database-loggen).
Mvh
Kent
--
http://www.celebrityshine.com/~kfr/ - Ny tegning uploadet.