gpt4 book ai didi

ruby - Ruby 多线程的奇怪行为

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

我正在尝试了解 Ruby 多线程,但它看起来很困惑。这是我尝试过的几个例子:

  1. 线程永远不会被执行并且程序结束
Thread.new do
puts "thread"
end

puts "main"
  • 线程已执行但从未终止
  • thread = Thread.new do
    puts "thread"
    end

    sleep while thread.alive?

    puts "main"
  • 一切都出乎意料地按预期进行:
  • thread = Thread.new do
    puts "thread"
    end

    puts thread.status while thread.alive?

    puts "main"

    Matz 到底是怎么回事?!

    最佳答案

    Thread never gets executed and program ends

    Thread.new do
    puts "thread"
    end

    puts "main"

    线程并行运行。 Ruby 主进程不会自动等待所有线程完成后再退出。

    您缺少的是 join 。这将等待线程完成。

    thread = Thread.new do
    puts "thread"
    end

    puts "main"

    thread.join

    Thread is executed but never terminates

    thread = Thread.new do
    puts "thread"
    end

    sleep while thread.alive?

    puts "main"

    sleep没有争论就永远沉睡。给它一个短暂的 sleep 时间,它就会起作用。

    thread = Thread.new do
    puts "thread"
    end

    sleep(0.1) while thread.alive?

    puts "main"

    Everything unexpectedly works as expected:

    thread = Thread.new do
    puts "thread"
    end

    puts thread.status while thread.alive?

    puts "main"

    既然您没有永远 sleep ,它就会按预期工作。

    关于ruby - Ruby 多线程的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66177567/

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