它有 crystal-lang 队列吗?
Does it have a crystal-lang Queue?
如何在crystallang上实现生产者-消费者模式?我正在寻找类似的东西 - http://ruby-doc.org/core-2.2.0/Queue.html
可能我需要使用 Channel
,但我不明白如何......因为它正在等待 "consumer" 将收到。
我的意思是:
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
你说得对,使用 Channel 是解决 Crystal 中并发通信的好方法。
请注意,默认情况下,一个 Channel 只能存储一个值,直到它被接收。
但是您可以使用缓冲的 Channel 来向 Channel 发送多个值,并且不需要立即接收它们。这本质上是一个 FIFO 队列,新项目在一端添加并从另一端移除。
# Create a channel with a buffer for 32 values
channel = Channel(Int32).new(32)
如何在crystallang上实现生产者-消费者模式?我正在寻找类似的东西 - http://ruby-doc.org/core-2.2.0/Queue.html
可能我需要使用 Channel
,但我不明白如何......因为它正在等待 "consumer" 将收到。
我的意思是:
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
你说得对,使用 Channel 是解决 Crystal 中并发通信的好方法。 请注意,默认情况下,一个 Channel 只能存储一个值,直到它被接收。
但是您可以使用缓冲的 Channel 来向 Channel 发送多个值,并且不需要立即接收它们。这本质上是一个 FIFO 队列,新项目在一端添加并从另一端移除。
# Create a channel with a buffer for 32 values
channel = Channel(Int32).new(32)