2014-05-19 1 views
7

GHC 런타임 내부 문서에서는 epoll/kqueue/poll을 사용하여 파일 디스크립터가 읽기/쓰기가 가능한지 여부를 감지한다고 설명합니다.GHC 런타임은 파일 I/O를 어떻게 처리합니까?

소켓 I/O가 어떻게 이루어 졌는지 알 수 있습니다. 그러나 디스크 파일 접근은 어떻습니까? 폴링 syscall은 소켓 I/O에서만 일반 파일에서는 작동하지 않습니다. 참된? 여기 상상할 수

유일한 옵션은 차단 콜에 대한 스레드 풀을 사용하고, 하나 개의 스레드 당 요청 ... 나사산 RTS에서

+0

(Linux, OSX 및 BSD와 같은) POSIX 플랫폼에서 설명자는 작은 정수이며 파일, 파이프, 소켓 또는 전혀 다른 것을 사용할 수 있습니다. 그리고 그들은 모두 투표와 같은 대부분의 지원 기능을 지원합니다. –

+2

@JoachimPileborg 디스크 파일 fd에 대한 폴링은 IO에 대해 준비가되었음을 항상 반환하지만 실제로는 차단됩니다. – user3489275

+1

@JoachimPileborg 죄송하지만 BS입니다. 얼마나 많이 읽으려고해도 문제가되지 않습니다. 어쨌든 (심지어 O_NONBLOCK으로도) 차단 될 수 있습니다. – user3489275

답변

3

, 전체 런타임 차단합니다. 스레드 된 RTS에서는 스레드 풀을 통해 이와 같이 안전한 외부 호출을 수행하므로 기능이 차단되지 않습니다.

관련 문제