2014-12-07 44 views
0

我竟被dlike要做的是創建多個線程調用略有不同的參數同樣的方法每一次,像這樣:在Ruby中創建多個相同的線程

x = 1 
argument = 3 
while x <= 10 do #10 is the number of desired threads 
    Thread.new{ 
     puts do.stuff(argument) 
    }.join 
    x += 1 
    arguments += 1 
end 

我的問題是,這個代碼導致主線程停止,直到聲明的線程完成。有什麼辦法可以創建這些線程,以便它們可以同時運行?
謝謝。

+0

需要注意的是,在MRI,線程將同時運行,但從未在平行由於[全局解釋鎖(https://en.wikipedia.org/wiki/Global_Interpreter_Lock)(GIL)。 – 2014-12-07 03:26:54

回答

1

代碼正在循環中加入(等待要終止的線程;導致第2個線程在第1個線程完成後運行,第3個線程在第2個線程後運行...)。

創建線程,並在循環外等待它們。

arguments = "3" 
threads = 10.times.map { 
    Thread.new { 
    puts do.stuff(arguments) 
    } 
    # NOTE: no join here. 
} 
threads.each { |t| t.join } 
+0

如果我想要執行類似於線程A調用do.stuff(3)的操作,那麼在創建10個線程的同時創建10個線程? – ApocalypticSnail 2014-12-07 03:04:43

+0

@ApocalypticSnail,我不明白你的意思。你能把它作爲一個單獨的questiin嗎? – falsetru 2014-12-07 03:08:03

+0

我可能沒有在上面說清楚。我想要做的是用不同線程中的不同參數多次調用相同的方法。 – ApocalypticSnail 2014-12-07 03:11:04