Aszinkron IO támogatás a NetBSD-ben

Címkék

Néhány nappal ezelőtt Mindaugas Rasiukevicius aszinkron IO (Asynchronous I/O - AIO) támogatást commit-olt a NetBSD-be. Az implementáció leírása itt.

Hozzászólások

"Without AIO, developer would implement asynchronicity in application level or use alternatives (eg. synchronous non-blocking model)"

Most akkor definíció szerint mi az aszinkron I/O, ha a nem-blokkoló szinkronnak számít?

--
joco voltam szevasz

A fenti mondatban ez hol szerepel? Az írja, hogy ha nincs AIO (ez egy megoldás), a fejlesztőnek ezt alkalmazásszinten kell kezelnie (ez egy másik megoldás), vagy valamilyen alternatívát kell alkalmaznia (pld. szinkron írások nem blokkolós körítése).

Ez jó esetben három külön dolog.

Az AIO ebben a formában a kernelben van megoldva, azaz te betolod neki, hogy mit akarsz, majd mész tovább a programodban és később lekérdezheted, hogy hol állnak az eventjeid (pollozós technika), vagy a kernel értesít arról, ha az adott művelet megtörtént.

Alkalmazás szinten megoldhatod például úgy, hogy van egy fő programod, meg egy másik, amelyek között valamilyen technikával átviszed az adatot. Ha írni akarsz, áttolod a biteket, szólsz a másik programnak, hogy dolgozzon, te pedig tudsz tovább haladni. A másik program blokkol az IO-n, tehát amíg nem futott le a művelet, nem tudsz neki feladatot adni. Ezt megkerülheted több program párhuzamos futtatásával.

Vagy pedig használhatsz valami olyat, amivel kezelni tudod az amúgy blokkoló műveletet nem blokkoló módon (pld. select, stb.).

O_ASYNC :a SIGIO signal is sent whenever
input or output becomes possible on that file descriptor.

O_NONBLOCK: If the O_NONBLOCK flag is not enabled, then system call is
blocked until the lock is removed or converted to a mode that is com-
patible with the access.