почему их разница в выводе скрипта ruby? - PullRequest
0 голосов
/ 30 августа 2011

У меня есть следующие сценарии ruby ​​rubyScript.rb:

require "rScript"
t1 = Thread.new{LongRunningOperation(); puts "doneLong"}
     sleep 1
     shortOperation()
     puts "doneShort"
     t1.join

rScript.rb:

def LongRunningOperation()
  puts "In LongRunningOperation method"
  for i in 0..100000
  end
 return 0
end
def shortOperation()
  puts "IN shortOperation method"
  return 0
end

ВЫХОД вышеописанного сценария, т. Е. (Ruby rubyScript.rb)

1) С использованием функции сна

In veryLongRunningOperation method
doneLong
IN shortOperation method
doneShort

2) Без использования функции сна, т. Е. Без функции сна. (Ruby rubyScript.rb)

In veryLongRunningOperation method
IN shortOperation method
doneShort
doneLong

почему существует разница ввыход.Что делает сон в последнем случае.Спасибо заранее.

Ответы [ 3 ]

2 голосов
/ 30 августа 2011

Режим сна позволяет основному потоку спать в течение 1 секунды.Ваша долгосрочная функция работает дольше, чем ваша короткая функция, но она все еще быстрее, чем одна секунда.

Если вы удалите режим ожидания, тогда ваша функция длительного запуска начнется в новом потоке, и основной поток продолжится без ожидания.,Затем он запускает функцию кратковременного запуска, которая завершается почти мгновенно, в то время как функция длительного запуска все еще работает.

В случае не удаленного сна это происходит следующим образом: Ваша функция длительного запуска запускается в новом потокеи основной поток продолжается.Теперь основной поток встречает команду сна и ждет 1 секунду.В это время функция длительного выполнения в другом потоке все еще работает и завершается.Основной поток продолжается после времени ожидания и запускает функцию кратковременного запуска.

1 голос
/ 30 августа 2011

sleep 1

Заставляет основной поток ждать 1 секунду, что позволяет t1 завершить работу до выполнения shortOperation.

1 голос
/ 30 августа 2011

sleep 1 переводит текущий поток в спящий режим (т.е. ничего не делает) на одну секунду.Таким образом, veryLongRunningOperation (который, несмотря на то, что операция выполняется очень долго, все еще занимает меньше секунды), имеет достаточно времени, чтобы закончить, прежде чем shortOperation даже запустится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...