Я изучаю темы и имею следующий код:
def timefunc(delay)
i = 0
while i <= 2
puts "func w/ #{delay} second delay at: #{Time.now}"
puts "Thread priority: #{Thread.current.priority}"
sleep(delay)
i = i + 1
end
end
puts "Started program at #{Time.now}"
t1 = Thread.new{timefunc(2)}
t2 = Thread.new{timefunc(1)}
puts "before joins"
t1.join
puts "between joins"
t2.join
puts "after joins"
puts "Ended program at #{Time.now}"
Вывод был:
Started program at 2018-05-04 10:23:51 -0600
before joins
func w/ 1 second delay at: 2018-05-04 10:23:51 -0600
func w/ 2 second delay at: 2018-05-04 10:23:51 -0600
Thread priority: 0
Thread priority: 0
func w/ 1 second delay at: 2018-05-04 10:23:52 -0600
Thread priority: 0
func w/ 2 second delay at: 2018-05-04 10:23:53 -0600
Thread priority: 0
func w/ 1 second delay at: 2018-05-04 10:23:53 -0600
Thread priority: 0
func w/ 2 second delay at: 2018-05-04 10:23:55 -0600
Thread priority: 0
between joins
after joins
Ended program at 2018-05-04 10:23:57 -0600
Я полагал, что поток, запущенный в t1.join, выполнит всю свою работу, прежде чем позволить main выполнить puts "between joins"
, но я был удивлен, когда t2.join также был выполнен первым. Ищет ли переводчик какие-либо операторы соединения и запускает ли их в первую очередь? Как это работает?