【问题标题】:Does it have a crystal-lang Queue?它有一个水晶语言队列吗?
【发布时间】:2018-01-06 14:05:07
【问题描述】:

Crystal lang如何实现模式生产者-消费者?我正在寻找类似的东西 - 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

【问题讨论】:

    标签: multithreading queue crystal-lang


    【解决方案1】:

    你说得对,使用Channel 是解决 Crystal 中并发通信的好方法。 请注意,默认情况下,一个 Channel 只能存储一个值,直到它被接收到。

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

    # Create a channel with a buffer for 32 values
    channel = Channel(Int32).new(32) 
    

    【讨论】:

    • 你太棒了!谢谢!
    猜你喜欢
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多