2014-05-19 4 views
7

Alcuni documenti sugli interni di runtime di GHC indicano che utilizza epoll/kqueue/poll per rilevare se un descrittore di file è pronto per la lettura/scrittura.In che modo il runtime di GHC gestisce l'I/O dei file?

Posso capire come è fatto per I/O socket. Ma per quanto riguarda l'accesso ai file su disco? Il sondaggio syscall non funziona con i file ordinari, solo con I/O socket; vero?

L'unica opzione che posso immaginare qui sta usando un pool di thread per chiamate di sistema di blocco, un thread-per-richiesta ...

+0

Su piattaforme POSIX (come Linux, OSX e BSD) un descrittore è un numero intero piccolo e può essere un file, una pipe, un socket o qualcosa di completamente diverso. E supportano per lo più le stesse funzioni di supporto, come il polling. –

+2

@JoachimPileborg poll sul file disco fd restituirà sempre che è pronto per IO, mentre in realtà si bloccherebbe. – user3489275

+1

@JoachimPileborg Mi dispiace ma questo è BS. Non importa quanto stai cercando di leggere, potrebbe comunque bloccare (anche con O_NONBLOCK). – user3489275

risposta

3

Negli RTS non filettati, l'intera fase di esecuzione bloccherà. Nel threaded RTS, farà chiamate estranee sicure in questo modo tramite il pool di thread, quindi la funzionalità non verrà bloccata.

Problemi correlati