2013-11-17 3 views
3

Два метода Thread#run and Thread#wakeup различны как-то, но мне это непонятно. Может ли кто-то предоставить пару кода с минимальной разницей (т. Е. Разница заключается только в использовании run в одном, wakeup в другом), которые показывают разные результаты и, возможно, объяснение для этого?Различия между Thread # run и Thread # wakeup

Редактировать Как Cary указывает, что это действительно дубликат this question, и есть хороший ответ, но теперь я не уверен, что это значит иметь Awaken нить, но не работает. Как это отличается от того, что нить находится в состоянии сна?

+1

То же, что http://stackoverflow.com/questions/12763593/difference-between-threadrun-and-threadwakeup? –

+0

Я ничего не знаю о потоках (в списке), но я нашел следующее объяснение [Mark Slagell] (http://books.google.ca/books?id=bKCuEhzyUgMC&pg=PA443&lpg=PA443&dq=ruby+thread+run+ vs + wakeup & source = bl & ots = vT0zpUPjGz & sig = gRrd3c0Cw9uYIcFwlsAxA4DmIvI & hl = en & sa = X & ei = dQqJUs3-ItG-2wWBxoCQAw & ved = 0CHkQ6AEwCQ # v = onepage & q = ruby% 20thread% 20run% 20vs% 20wakeup & f = false): «Разница между этими двумя методами заключается в том, что' wakeup 'просто делает поток подходящим для планирования (ставит его обратно в линию, так сказать), тогда как' run' инструктирует планировщик немедленно запустить его. " Надеюсь это поможет. –

+1

, как @CarySwoveland указал, 'run' внутренне вызывает' wakeup', но также использует 'rb_thread_schedule();' для мгновенного планирования этого потока. – phoet

ответ

0

Чтобы ответить на второй вопрос. Вы не можете планировать спящий поток, однако, когда поток бодрствует, его можно планировать, даже если он не запускается в настоящее время.

Чтобы добавить к первой части из моего понимания пробуждения и запуска, это запуск запускает пробуждение внутри него, а затем вызовы запускаются на нем.

Надеюсь, что это поможет.

Смежные вопросы