Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GHC运行时如何处理文件I/O?_C_Haskell_Ghc - Fatal编程技术网

GHC运行时如何处理文件I/O?

GHC运行时如何处理文件I/O?,c,haskell,ghc,C,Haskell,Ghc,一些关于GHC运行时内部的文章提到,它使用epoll/kqueue/poll来检测文件描述符是否已准备好读/写 我可以理解套接字I/O是如何实现的。但是磁盘文件访问呢?轮询系统调用不适用于普通文件,仅适用于套接字I/O;是吗 这里我能想象的唯一选项是使用线程池来阻止系统调用,每个请求一个线程…在无线程RTS中,整个运行时都会被阻止。在线程化RTS中,它将通过线程池执行这样的安全外部调用,因此该功能不会阻塞。在POSIX平台(如Linux、OSX和BSD)上,描述符是一个小整数,可以是文件、管道、

一些关于GHC运行时内部的文章提到,它使用epoll/kqueue/poll来检测文件描述符是否已准备好读/写

我可以理解套接字I/O是如何实现的。但是磁盘文件访问呢?轮询系统调用不适用于普通文件,仅适用于套接字I/O;是吗


这里我能想象的唯一选项是使用线程池来阻止系统调用,每个请求一个线程…

在无线程RTS中,整个运行时都会被阻止。在线程化RTS中,它将通过线程池执行这样的安全外部调用,因此该功能不会阻塞。

在POSIX平台(如Linux、OSX和BSD)上,描述符是一个小整数,可以是文件、管道、套接字或完全不同的内容。它们都支持几乎相同的支持功能,例如轮询。@JoachimPileborg poll on disk file fd将始终返回它已准备好进行IO,而实际上它将被阻止。@JoachimPileborg我很抱歉,但这是BS。不管您试图读取多少数据,它都可能会阻塞(即使使用O_NONBLOCK)。@JoachimPileborg:一个常规文件将始终在准备就绪时轮询,即使读取一个字节会阻塞。BSD的kqueue适用于套接字和文件。