小编J F*_*sch的帖子

为什么我的并发Haskell程序提前终止?

我有一个UDP服务器,它反映了它收到的每个ping消息(我认为这很好用).我是客户端,我想做两件事:

  1. 确保我发射了N(例如10000)消息,并且
  2. 计算正确收到的回复数.

看来,无论是因为UDP的性质还是因为这forkIO件事,我的客户端代码都会过早结束/根本不进行任何计数.

另外,我很惊讶地看到函数tryOnePing返回Int 4的250倍.为什么会这样?

main = withSocketsDo $ do
        s <- socket AF_INET Datagram defaultProtocol
        hostAddr <- inet_addr host
        thread <- forkIO $ receiveMessages s
        -- is there any better way to eg to run that in parallel and make sure
        -- that sending/receiving are asynchronous? 


        -- forM_ [0 .. 10000] $ \i -> do
              -- sendTo s "ping" (SockAddrInet port hostAddr)
        -- actually this would be preferred since I can discard the Int …
Run Code Online (Sandbox Code Playgroud)

concurrency networking haskell

5
推荐指数
1
解决办法
1132
查看次数

如何将TChan邮箱附加到线程并使用套接字接收/发送消息?

我想为线程手动创建TChan邮箱,其中进入的消息/网络数据包与来自本地线程的消息收集在同一队列中.

我不确定Haskell的典型方法是什么.如何从插槽写入TChan邮箱?

它会是一个有几个独立队列的邮箱吗?或者在几个邮箱中?

我已经看过epass但还没试过.尽管如此,我想我应该做的事情应该是可能的,我还没有真正详细的想法让我开始.有没有人有类似的代码示例?

haskell

5
推荐指数
1
解决办法
150
查看次数

全局变量和读者monad

我有一个模块,通过调用初始化函数创建并初始化全局环境(定义某些约束,如邻居IP地址等).许多后续函数在调用时应使用这些约束.

虽然原则上我理解读者monad的作用,但我不太确定如何将其应用于我的问题,尤其是.

  • 它如何用于初始化由用户定义并作为数据/参数传递给初始化函数的环境.我的意思是,读者monad必须从某个地方获得构成全局不可变环境的实际值.我希望从初始化函数调用中读取值,如下所示myinitial :: arg1 -> arg1 -> IOString,arg1arg2通过reader monad(?)成为后续函数可访问的全局不可变数据

  • 我如何将这些环境值用作函数参数,例如recvFrom s arg1,arg1来自我的环境的全局不可变数据.要么if arg2 > arg1 then ... else ...

我当然可以制作一个配置文件,但我觉得配置文件会带来很大的灵活性.

[编辑]我理解问题,但是不应该有额外的"无点类似"方式,以便如果函数签名被定义正确,可以省略全局/环境不可变吗?我怎么会需要重构我的if-then-else来应用.

haskell

5
推荐指数
2
解决办法
1397
查看次数

何时选择插件以及何时选择提示

我不知道什么是对选择的参数提示的插件,反之亦然.我没有目标代码,但我想在运行时执行简单的ascii.hs文件.我看到,在评估方面,它们都非常相似.通常我会选择提示,因为它没有我目前不需要的功能.还有其他见解吗?

haskell

5
推荐指数
1
解决办法
211
查看次数

操纵"任意"元组

我有简单的元组(例如从数据库中读取),因为我不知道元素的数量和内容.例如 (String, Int, Int)(String, Float, String, Int).

我想编写一个泛型函数,它将采用所有类型的元组并用字符串"NIL"替换所有数据.如果字符串"NIL"已经存在,它应该保持不变.

回到这个例子: ("something", 3, 4.788)应该导致("something", "NIL", "NIL")

("something else", "Hello", "NIL", (4,6)) 应该导致 ("something else", "NIL", "NIL", "NIL")

我显然不知道从哪里开始,因为用已知的元组做这个不会有问题.如果没有Template Haskell,是否有可能达到我想要的结果?

haskell

5
推荐指数
2
解决办法
1358
查看次数

Haskell STM扩展

我正在寻找几年前在一篇论文中读到的Haskell STM扩展.我仍然记得,一方面,作者声称已经显着改进了Haskell STM,另一方面他们遇到了他们无法解释的测量中的不一致.我还记得作者很清楚.谁会知道那是什么纸?我找不回来了.

haskell

5
推荐指数
0
解决办法
92
查看次数

Cabal源包和黑线鳕文档

我尝试测试一个cabal包上传到HackageDB.当我在hackage网站上进行测试时,一切顺利,它呈现给我的输出仅包含内容页面,并且没有进一步指向实际模块文档的链接.

现在,我不知道这是否意味着文档无法构建(cabal haddock运行正常并在我的测试系统上构建正确的html)或者我需要以某种方式手动将html包含到包中或者......可能构建可分配包在cabal中有更多选项?

haskell cabal

4
推荐指数
1
解决办法
146
查看次数

forkIO线程和OS线程

如果我使用forkIO创建一个线程,我需要提供一个函数来运行并获取一个标识符(threadID).然后,我可以通过例如工作负载,MVAR等与此动物进行通信.但是,据我所知,创建的线程非常有限,并且只能以SIMD方式工作,其中为线程创建提供的功能是指令.我无法更改线程启动时提供的功能.据我所知,这些用户线程最终是由OS映射到OS线程的.

我想知道Haskell线程和OS线程如何进行接口.为什么完全不同的Haskell线程可以映射到同一个OS线程?为什么不需要使用固定指令启动OS线程(因为forkIO需要)?调度程序(?)如何识别可能分发的应用程序中的用户线程?换句话说,为什么操作系统线程如此灵活?

最后,有没有办法从应用程序中转储所选线程的堆?

haskell

4
推荐指数
2
解决办法
1547
查看次数

使用camel-redis设置redis键/值

我想使用camel-redis 设置键/值对。我尝试:

spring-redis://localhost:6379?command=SET&CamelRedis.key=testkey&CamelRedis.value=100
Run Code Online (Sandbox Code Playgroud)

但没有喜悦。我收到错误:

There are 2 parameters that couldn't be set on the endpoint. Check the uri if the parameters are spelt correctly and that they are properties of the endpoint. Unknown parameters=[{key=testkey, value=100}]
Run Code Online (Sandbox Code Playgroud)

尽管有很多关于如何订阅等的示例,但我没有找到关于如何设置键/值对的单个示例。我该怎么做呢?

apache-camel redis

4
推荐指数
1
解决办法
3130
查看次数

这是使用liftM的情况吗?

我有以下功能:

sendq :: Socket -> B.ByteString -> String -> IO PortNumber -> IO ()
sendq s datastring host port = do
     hostAddr <- inet_addr host
     sendAllTo s datastring (SockAddrInet port hostAddr)
Run Code Online (Sandbox Code Playgroud)

而sendAllTo具有功能签名

sendAllTo :: Socket -> ByteString -> SockAddr -> IO ()
Run Code Online (Sandbox Code Playgroud)

问题是我以前的函数传递了一个IO PortNumber,其中SockAddr只接受一个PortNumber.我试图通过将sendAllTo提升到IO monad来使这两者兼容:

liftM sendAllTo s datastring (SockAddrInet port hostAddr)
Run Code Online (Sandbox Code Playgroud)

但没有快乐.告诉我许多论点.这是liftM的案例吗?我该如何正确应用?

haskell

3
推荐指数
1
解决办法
438
查看次数

标签 统计

haskell ×9

apache-camel ×1

cabal ×1

concurrency ×1

networking ×1

redis ×1