首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >它是否有crystal-lang队列?

它是否有crystal-lang队列?
EN

Stack Overflow用户
提问于 2018-01-06 22:05:08
回答 1查看 423关注 0票数 2

如何在水晶石上实现图案生产者-消费者?我正在寻找这样的东西- http://ruby-doc.org/core-2.2.0/Queue.html可能我需要使用Channel,但我不明白如何..因为它是等待,而“消费者”将收到。

我的意思是:

代码语言:javascript
复制
channel = Channel(Int32).new

spawn do
  15.times do |i|
    # ... do something that take a time
    puts "send #{i}"
    channel.send i # paused while someone receive, but i want to continue do the job that takes a time..
  end
end

spawn do
  loop do
    i = channel.receive
    puts "receive #{i}"
    sleep 0.5
  end
end

sleep 7.5
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-07 05:23:50

您说得对,使用Channel是解决Crystal中并发通信的一个很好的方法。请注意,默认情况下,在接收通道之前,通道只能存储一个值。

但是您可以使用buffered Channel来向Channel发送多个值,并且不需要立即接收这些值。这本质上是一个FIFO队列,在队列的一端添加新项目,从另一端删除新项目。

代码语言:javascript
复制
# Create a channel with a buffer for 32 values
channel = Channel(Int32).new(32) 
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48128133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档