2014-05-19 10 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.