小编Auf*_*ben的帖子

经过几个月的运行后,Haskell随机数突然开始"收敛"

我有一个服务器程序,从一组网络对等体中随机选择10来完成任务.生成对等体随机索引的代码如下:

indices = let index = getStdRandom $ randomR (0, number_of_peers - 1)
          in sequence $ replicate 10 index
Run Code Online (Sandbox Code Playgroud)

该程序已经运行了几个月,每天产生数千个"索引",并且一直工作到昨天,当我注意到出现问题时:生成的随机数似乎"收敛"到一些重复值(结果是相应的网络对等体负载很重).

要查看更改,以下是几天前的服务器日志:

peers selected: [55,47,80,74,183,85,04,33,72,58] 
Run Code Online (Sandbox Code Playgroud)

和今天的日志(如你所见,重复选择对等53,37和195):

peers selected: [53,53,37,37,37,37,195,195,195,21] 
Run Code Online (Sandbox Code Playgroud)

该程序在x86_64版本的Ubuntu 10.10上运行.

random haskell

30
推荐指数
1
解决办法
1224
查看次数

如何在Haskell中的另一个函数的参数上映射函数?

所以最初我写道:

xs <- getAddrInfo (Just hints) (Just addr) (Just port)
Run Code Online (Sandbox Code Playgroud)

那么在我看来,函数'Just :: a - > Maybe a'有点"映射"在'hints','addr'和'port'上,所以我提出了类似这样的东西:

map_arg g f a b c = f (g a) (g b) (g c)
xs <- map_arg Just getAddrInfo hints addr port
Run Code Online (Sandbox Code Playgroud)

但GHC期望(ga),(gb)和(gc)属于同一类型,因此不进行类型检查.

有没有办法做到这一点,或者更一般地说,有没有办法将函数映射到另一个函数的参数?

haskell

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

如何在嵌入式Linux中高效地在VFAT分区上创建大文件

我试图在嵌入式Linux框中使用`dd'命令在VFAT分区上创建一个大的空文件:

dd if=/dev/zero of=/mnt/flash/file bs=1M count=1 seek=1023
Run Code Online (Sandbox Code Playgroud)

目的是跳过前1023个块并在文件末尾只写一个块,这在原生EXT3分区上应该非常快,而且确实如此.但是,此操作在VFAT分区上变得非常慢,并伴有以下消息:

lowmem_shrink:: nr_to_scan=128, gfp_mask=d0, other_free=6971, min_adj=16
// ... more `lowmem_shrink' messages
Run Code Online (Sandbox Code Playgroud)

另一种尝试是在VFAT分区上fopen()一个文件然后fseek()到最后写入数据,这也被证明是慢的,以及来自内核的相同消息.

基本上,有没有一种快速的方法在VFAT分区上创建文件(不遍历前1023块)?

谢谢.

linux filesystems file-io embedded-linux

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

标签 统计

haskell ×2

embedded-linux ×1

file-io ×1

filesystems ×1

linux ×1

random ×1