- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Haskell 中的并行和并发编程中,Simon Marlow 提供了 Stream a
基于以下数据以及一些生产者和消费者:
data IList a
= Nil
| Cons a (IVar (IList a))
type Stream a = IVar (IList a)
streamFromList :: NFData a => [a] -> Par (Stream a)
streamFromList xs = do
var <- new
fork $ loop xs var
return var
where
loop [] var = put var Nil
loop (x:xs) var = do
tail <- new
put var (Cons x tail)
loop xs tail
Later,他提到了这种方法的缺点并提出了解决方案:
In our previous example, the consumer was faster than the producer. If, instead, the producer had been faster than the consumer, then there would be nothing to stop the producer from getting a long way ahead of the consumer and building up a long IList chain in memory. This is undesirable, because large heap data structures incur overhead due to garbage collection, so we might want to rate-limit the producer to avoid it getting too far ahead. There’s a trick that adds some automatic rate-limiting to the stream API. It entails adding another constructor to the
IList
type:data IList a
= Nil
| Cons a (IVar (IList a))
| Fork (Par ()) (IList a)
但是,他并没有完成这个方法:
I’ll leave the rest of the implementation of this idea as an exercise for you to try on your own. See if you can modify
streamFromList
,streamFold
, andstreamMap
to incorporate theFork
constructor. The chunk size and fork distance should be parameters to the producers (streamFromList
andstreamMap
).
同样的问题has been asked on the mailing list ,但没有人给出答案。
那么如何限制生产者的速率呢?
最佳答案
重要的部分在于loop
函数:
loop [] var = put var Nil
loop (x:xs) var = do
tail <- new
put var (Cons x tail)
loop xs tail
我们需要添加 fork 距离f
和 block 大小c
作为参数:
loop _ _ [] var = put var Nil
loop 0 c (x:xs) var = -- see below
loop f c (x:xs) var = do
tail <- new
put var (Cons x tail)
loop (f-1) c xs tail
fork 距离在每次迭代中都会减少。当货叉距离为零时我们需要做什么?我们提供了一个Fork op t
,其中op
继续生成列表:
loop 0 c (x:xs) var = do
tail <- new
let op = loop c xs tail
put var (Fork op (Cons x tail))
请注意,如果列表为空,我们不会使用Fork
。这是可能的,但有点愚蠢,毕竟已经没有什么可生产的了。更改 streamFromList
现在很简单:
streamFromList :: NFData a => Int -> Int -> [a] -> Par (Stream a)
streamFromList f c xs = do
var <- new
fork $ loop f c xs var
return var
现在,为了使用它,我们需要更改 streamFold
中的 case
:
streamFold :: (a -> b -> a) -> a -> Stream b -> Par a
streamFold fn acc instrm = acc `seq` do
ilst <- get instrm
case ilst of
Cons h t -> streamFold fn (fn acc h) t
Fork p (Cons h t) -> -- see below
_ -> return acc
请记住,我们的 streamFromList
中的 Fork
不允许有空列表,但以防万一我们匹配它(并且 Nil
) 通过通配符。
如果遇到带有数据的Fork
,我们需要做什么?首先,我们需要使用fork
来运行Par()
操作,以便传播t
,然后我们就可以开始使用它。所以我们的最后一个案例是
Fork p (Cons h t) -> fork p >> streamFold fn (fn acc h) t
streamMap
是类似的。仅在这种情况下,您才可以像 streamFromList
中那样再次在循环中使用其他参数。
关于haskell - 并行 haskell 。对生产者进行速率限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24773130/
我需要一次发送至少 200 条消息。程序启动后,给15或17发邮件成功,然后报错: 消息错误: com.sun.mail.smtp.SMTPSendFailedException: 421 4.4.2
我目前正在开发一个使用 AVSynthesizer 将文本转换为语音的 iOS 应用程序。 我想要做的是,当合成器在说话时,可以通过 slider 改变发声率,并且说话的速度会发生变化。 我在 sli
假设我们有以下场景: 包含 10,000 条消息的服务总线队列 Azure Functions(使用计划),其中函数设置为 SB 队列的触发器 外部(不受我们控制)系统无法超过特定请求率 如果我尽快对
TextToSpeech有设置语速的方法:setSpeechRate() .但它没有查询当前速度的相反方法。 有没有办法向系统查询该值? 最佳答案 您可能会得到默认的 TTS 语速 Settings.
我有一个关于 NGINX 速率限制的问题。 是否可以根据 JWT token 的解码值进行速率限制?我在文档中找不到任何这样的信息。 或者即使有一种通过创建纯自定义变量(使用 LuaJIT)来进行速率
我有一个带有方向键和 2 个按钮的游戏 handle 。所有这些都是数字的(不是模拟的)。 我有一个处理他们的事件的程序: -(void)gamepadTick:(float)delta {
所以我需要在 OpenCV 中获取网络摄像头的 fps 速率。哪个功能可以做这样的事情? 最佳答案 int cvGetCaptureProperty( CvCapture* capture, int
我四处寻找 CURL 设置文件,但没有在/etc/中找到它,也没有在 curl 站点 ether 上找到太多... 所以基本上我想做的是设置 curl 可以上传的最大速度限制(无论它正在运行多少个实例
我有一个在 Atom 上运行的嵌入式 Linux 系统,这是一个足够新的 CPU,可以有一个不变的 TSC(时间戳计数器),内核在启动时测量其频率。我在自己的代码中使用 TSC 来保持时间(避免内核调
我正在寻找一种以高粒度单独限制 RPC 速率的方法,令我沮丧的是,针对此问题可用的选项并不多。我正在尝试用 gRPC 替换 REST API,对我来说最重要的功能之一是能够为每个路由添加中间件。不幸的
我正在使用 PHP、MySQL 和 Redis 开发 API,并希望对特定调用进行速率限制。 API 位于 CloudFlare 后面。为实现这一点,我将增加每个 IP 地址每小时在 Redis 中进
我正在寻找一种以编程方式(无论是调用库还是独立程序)监视 linux 中实时 ip 流量的方法。我不想要总数,我想要当前正在使用的带宽。我正在寻找与 OS X 的 istat 菜单的网络流量监视器类似
所以我注意到 Apple 更改了 SKStoreProductViewController,禁用了“写评论”按钮。此问题是否有任何解决方法或修复方法? 最佳答案 SKStoreProductViewC
我今天浏览了 Amazon RDS 定价网站,现在确实想知道他们实际上如何计算 I/O 速率? “每 100 万个请求 0.10 美元”到底是什么意思? 谁能举出一些简单的例子,从 EC2 到 RDS
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 5 年前。 Improve
在旧的 API 中,剩余的允许容量显然作为 X-Ratelimit-Remaining 返回HTTP header 。 然而,current version's documentation对此一无所获
在我的 Android 应用程序中,我观察到前置摄像头录制的视频以 7-10 fps 的速度录制,而后置摄像头的工作正常, native 摄像头应用程序确实以 29fps 的速度录制前置摄像头的视频。
我正在编码一个里面有 dvb_teletext 的视频。打开输出流 #1:2 的编码器时出现错误提示。我使用以下命令对我的视频进行编码。 ffmpeg -threads 8 -i input.ts -
我正在使用以下命令为我的视频添加淡入淡出效果 {"-y", "-ss", "" + startMs / 1000, "-t", "" + (endMs - startMs) / 1000, "-i",
我正在尝试使用以下命令通过 FFMPEG 将 avi 视频文件转换为 flv 格式: -i C:\files\input\test.avi -y -ab 448k -ar 48000 -vcodec
我是一名优秀的程序员,十分优秀!