Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / вопрос по Thread.yield() / 5 сообщений из 5, страница 1 из 1
23.04.2012, 21:43:30
    #37767130
roibush
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по Thread.yield()
Всем привет.

Помогите плиз разобраться с методом Thread.yield(); Прекрасно знаю что его не рекомендуют использовать. Во всех описаниях сказано : "данный метод позволяет отдать какой то квант времени процессорного времени на выполнение других потоков, которые имеют такой же приоритет". Но ничего не сказано отпускает ли он ресурсы которые у него имеются на время действия yield?
Кто знает? Заранее спасибо!
...
Рейтинг: 0 / 0
23.04.2012, 21:52:52
    #37767133
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по Thread.yield()
roibush Помогите плиз разобраться с методом Thread.yield(); Прекрасно знаю что его не рекомендуют использовать. Во всех описаниях сказано : "данный метод позволяет отдать какой то квант времени процессорного времени на выполнение других потоков, которые имеют такой же приоритет". Но ничего не сказано отпускает ли он ресурсы которые у него имеются на время действия yield? Кто знает? Заранее спасибо!
Не уверен на счет "кванта времени". Просто отдаёт управление другим потокам. Есть одно ядро, которое может обслуживать только один поток. И два параллельных потока. Если тот, который на данный момент исполняется, вызовет этот метод, то процессор переключит контекст на другой поток и будет его выполнять. Почему не рекомендуют использовать - тоже не знаю. Просто как-то не особо нужен в современных многоядерных системах, где ОС и сама с переключениями контекста не плохо справляется.
...
Рейтинг: 0 / 0
23.04.2012, 22:25:39
    #37767160
roibush
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по Thread.yield()
Blazkowicz, спасибо за ответ. А что насчет освобождения локов?
...
Рейтинг: 0 / 0
23.04.2012, 23:00:11
    #37767195
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по Thread.yield()
видел тут на днях, кстати yield(), sleep(0), wait(0,1) and parkNanos(1)
...
Рейтинг: 0 / 0
25.04.2012, 03:11:33
    #37769615
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по Thread.yield()
roibushВсем привет.

Помогите плиз разобраться с методом Thread.yield(); Прекрасно знаю что его не рекомендуют использовать. Во всех описаниях сказано : "данный метод позволяет отдать какой то квант времени процессорного времени на выполнение других потоков, которые имеют такой же приоритет". Но ничего не сказано отпускает ли он ресурсы которые у него имеются на время действия yield?
Кто знает? Заранее спасибо!

Ответ - не отпускает. Его не то чтобы не рекомендуют использовать - а просто имеют ввиду, что поведение этого метода зависит от версии JVM и ОС и не стоит на него полагаться, в некоторых случаях, оптимизирующие компиляторы вообще считают что это бессмысленно и выкидывают из байт-кода, заменяя nop-ом.
Вот хорошая статья - http://www.javamex.com/tutorials/threads/yield.shtml



авторвидел тут на днях, кстати yield(), sleep(0), wait(0,1) and parkNanos(1)


Ну так а чего он ждал собственно? Чтобы понять разницу - надо видеть семантическую разницу этих методов - первые два не отпускают мониторы, а вторые - отпускают, вот и вся разница, и вообще этот перец, не знаю случайно или нет, очень интересно считает:)

Код: java
1.
2.
3.
4.
System.out.printf("The average time to yield %.1f μs, sleep(0) %.1f μs, " +
                    "wait(0,1) %.1f μs and LockSupport.parkNanos(1) %.1f μs%n",
                    (time1 - time0) / repeat / 1e3, (time2 - time1) / repeat / 1e3, 
                    (time3 - time2) / (repeat/10) / 1e3, (time4 - time3) / (repeat/10) / 1e3);



Таким образом, оценки для wait(0,1) и LockSupport.parkNanos(1) - завышены в 10 раз)
На моей машине получилось
The average time to yield 0,3 μs, sleep(0) 0,9 μs, wait(0,1) 196,1 μs and LockSupport.parkNanos(1) 197,5 μs
Что вполне обьясняемо
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / вопрос по Thread.yield() / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]