Ruby 这些线是如何工作的?
我有一个小代码只是为了测试Ruby 这些线是如何工作的?,ruby,multithreading,Ruby,Multithreading,我有一个小代码只是为了测试 #!/usr/bin/env ruby def A puts "A" sleep 2 end def B puts "B" sleep 2 end [ Thread.new(loop{A()}), Thread.new(loop{B()}) ].each do |thr| thr.join end 但它并没有像我希望的那样起作用。 我希望我能得到 A B A B 等等,但我只是 A A A A 这意味着只启动了第一个线程
#!/usr/bin/env ruby
def A
puts "A"
sleep 2
end
def B
puts "B"
sleep 2
end
[
Thread.new(loop{A()}),
Thread.new(loop{B()})
].each do |thr|
thr.join
end
但它并没有像我希望的那样起作用。
我希望我能得到
A
B
A
B
等等,但我只是
A
A
A
A
这意味着只启动了第一个线程。
这是否意味着ruby会在第一个线程关闭时等待第二个线程的启动?
如何以线程的形式运行线程,我希望我的应用程序中的线程能够并行工作,主应用程序线程将是它自己的工作
你能给我什么建议?代码不是在线程中运行循环,而是在主线程中运行循环;这使得线程由于无限循环而无法启动 替换以下行(括号): 带(大括号):
传递块而不是(无限)循环的返回值。代码不是在线程中运行循环,而是在主线程中运行循环;这使得线程由于无限循环而无法启动 替换以下行(括号): 带(大括号):
传递块而不是(无限)循环的返回值。对线程ctor的调用没有达到预期效果。您正在将循环块的结果传递给线程构造函数。这样,循环必须在线程开始之前结束。但是由于循环永远不会结束,因此只能看到在当前线程中执行的
A()
方法输出
试着这样称呼它:
[
Thread.new{loop{A()}},
Thread.new{loop{B()}}
]
对线程ctor的调用没有达到预期效果。您正在将循环块的结果传递给线程构造函数。这样,循环必须在线程开始之前结束。但是由于循环永远不会结束,因此只能看到在当前线程中执行的
A()
方法输出
试着这样称呼它:
[
Thread.new{loop{A()}},
Thread.new{loop{B()}}
]
[
Thread.new{loop{A()}},
Thread.new{loop{B()}}
]