Haskell GHC IO manager支持哪些IO活动?

Haskell GHC IO manager支持哪些IO活动?,haskell,ghc,Haskell,Ghc,我一直在读GHC中新的IO管理器,它使用异步事件通知并避免阻塞I/O以实现高吞吐量 哪些IO活动可以通过新的异步IO代码进行管理?文件读写与网络活动?数据库访问?是否存在经理必须使用阻塞的IO类型?一个令人满意的答案: 新GHC IO管理器的核心是kqueue()/epoll()事件循环。所以我希望任何可以建立在这个基础上的东西都是合格的——如果不是现在,那么以后。这尤其意味着: 文件IO 网络IO 代码(我几个月前看过了,事情可能已经改变了)还包含通过优先级(搜索)队列注册和运行各种超时的

我一直在读GHC中新的IO管理器,它使用异步事件通知并避免阻塞I/O以实现高吞吐量


哪些IO活动可以通过新的异步IO代码进行管理?文件读写与网络活动?数据库访问?是否存在经理必须使用阻塞的IO类型?

一个令人满意的答案:

新GHC IO管理器的核心是
kqueue()/epoll()
事件循环。所以我希望任何可以建立在这个基础上的东西都是合格的——如果不是现在,那么以后。这尤其意味着:

  • 文件IO
  • 网络IO
代码(我几个月前看过了,事情可能已经改变了)还包含通过优先级(搜索)队列注册和运行各种超时的支持。这表明大多数类似睡眠的调用也可以在接口上进行

关于数据库访问:当然,您经常通过网络IO套接字访问数据库,因此在单独的线程中调用
forkIO
和执行DB访问应该是可行、快速和安全的。将数据传回应用程序的其余部分可以通过一种并发方式来完成,
Chan
STM.TChan


我不认为有哪种IO管理器必须求助于阻塞本身,但我可以想象,有些库可能会绕过新的IO管理器,直奔要害。当然,它们会阻塞。

任何可以由
epoll
/
kqueue
管理的文件描述符都是合格的。希望异步处理I/O的库需要通过以下方式与I/O管理器协作:

  • 使文件描述符无阻塞,以及
  • 在重试以前返回的系统调用之前,在
    GHC.Conc
    中调用
    threadWaitRead
    threadWaitWrite
    函数

这已经为
句柄
套接字
类型完成。例如,如果使用C数据库库的绑定,则会出现阻塞行为,因为该库不会与I/O管理器合作。

Wow。。。4个热门,但只有一票。真奇怪。@XXL StackOverflow有最喜欢的吗?因为你的评论,我完全注意到了。@monadic是的,有。只需点击问题下方的开始按钮即可。如果发生变化,您会收到通知,就好像这是您自己的问题。请注意,
tibbe
可能是这方面的知情人士:)