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