Domanda

seguito al dibattito svoltosi Come si usa AIO e epoll insieme in un ciclo singolo evento? .

Ci sono infatti 2 "aio" API in Linux. C'è POSIX AIO (l'aio_ * famiglia di funzioni), incluso nella glibc e libaio sviluppato credo da RedHat (?), L'io_ * famiglia.

Il primo permette la registrazione di richieste di notifica tramite membro aio_sigevent aiocb. Che può essere facilmente integrato con ppoll loop di eventi () / pselect (). Se si desidera integrare POSIX AIO con epoll (), allora avete bisogno di tradurre il segnale in un evento su un fd fittizio (un tubo forse) e attendere con epoll, mentre la cattura il segnale sia in modo classico o con ppoll / Selezionare. Quanto è sicura la prima scelta (sighandlers normali), dipende dall'applicazione. E forse l'epoll ma non sono pienamente consapevoli dei suoi interni. Posso tranquillamente assumere che se ho un app epoll based e voglio aggiungere il supporto POSIX aio poi mi sono fregato? Questa è stata la mia domanda.

La seconda implementazione AIO, libaio - può essere utilizzato anzi con eventfd () (struct IOCB avente un elemento aio_resfd che dovrebbe essere zero oppure un eventfd per fornire risultati AIO a). Ma non è da manuale. POSIX-specificato, che è.

Sogno di me stesso di essere un utente BSD *, dove tutto è chiaro. Hai la POSIX AIO e supporto kqueue () per gli eventi AIO. Cristallino. Come molte altre cose.

È stato utile?

Soluzione

Nota È possibile utilizzare POSIX AIO con epoll, c'è signalfd(2) crea un descrittore di file che è possibile utilizzare per la notifica dei segnali in un loop basato epoll.

Anche il secondo API AIO dovrebbe finalmente essere quello basi glibc di essa la realizzazione di POSIX Aio in poi, non è solo ancora lontani ... (non so se qualcuno sta lavorando su di esso sia)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top