gpt4 book ai didi

monad 中的多线程

转载 作者:行者123 更新时间:2023-12-04 08:28:28 24 4
gpt4 key购买 nike

我需要在同一个 monad 的上下文中运行多个并发进程,比如 Connection .我希望像下面这样的东西会起作用:

main = runConnection connectionSettings $ do
forkIO action1
forkIO action2
action3

但是 forkIO需要在 IO 中运行要在 IO 中的上下文和操作也。

假设这些操作的类型为 :: Connection () ,需要做什么才能同时运行它们(要实现哪些实例等)?

目前我正在解决这个问题,但显然这是不对的:
main = do
forkIO $ runConnection connectionSettings action1
forkIO $ runConnection connectionSettings action2
runConnection connectionSettings action3

最佳答案

我发现了一个美丽的"monad-parallel"用于非常相似目的的库,以及它的更强大的分支 - "classy-parallel" .

要使 monad 以可并行方式使用,它需要有一个 Parallel 的实例。类型类。并且“classy-parallel”库已经为此目的提供了最重要类型的实例:ResourceT IOReaderT .

假设存在适当的实例,有问题的代码可以转换为以下内容:

import qualified Control.Monad.Parallel as Parallel

main = runConnection connectionSettings $
Parallel.sequence [action1, action2, action3]

用于简单地 fork ResourceT resourceForkIO 可能有用。还有一个 "monad-fork"库,它提供了对 forkIO 之上的 fork 的简洁概括和 resourceForkIO .

关于monad 中的多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14151759/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com