gpt4 book ai didi

multithreading - 它是否具有 Crystal 语言队列?

转载 作者:行者123 更新时间:2023-12-03 12:54:13 24 4
gpt4 key购买 nike

如何在 Crystal 语言上实现模式生产者-消费者?我正在寻找类似的东西-http://ruby-doc.org/core-2.2.0/Queue.html
可能我需要使用Channel,但我不知道如何..因为它正在等待“消费者”的到来。

我是说:

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)

关于multithreading - 它是否具有 Crystal 语言队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48128133/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com