|
|
|
вопрос по Thread.yield()
|
|||
|---|---|---|---|
|
#18+
Всем привет. Помогите плиз разобраться с методом Thread.yield(); Прекрасно знаю что его не рекомендуют использовать. Во всех описаниях сказано : "данный метод позволяет отдать какой то квант времени процессорного времени на выполнение других потоков, которые имеют такой же приоритет". Но ничего не сказано отпускает ли он ресурсы которые у него имеются на время действия yield? Кто знает? Заранее спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2012, 21:43:30 |
|
||
|
вопрос по Thread.yield()
|
|||
|---|---|---|---|
|
#18+
roibush Помогите плиз разобраться с методом Thread.yield(); Прекрасно знаю что его не рекомендуют использовать. Во всех описаниях сказано : "данный метод позволяет отдать какой то квант времени процессорного времени на выполнение других потоков, которые имеют такой же приоритет". Но ничего не сказано отпускает ли он ресурсы которые у него имеются на время действия yield? Кто знает? Заранее спасибо! Не уверен на счет "кванта времени". Просто отдаёт управление другим потокам. Есть одно ядро, которое может обслуживать только один поток. И два параллельных потока. Если тот, который на данный момент исполняется, вызовет этот метод, то процессор переключит контекст на другой поток и будет его выполнять. Почему не рекомендуют использовать - тоже не знаю. Просто как-то не особо нужен в современных многоядерных системах, где ОС и сама с переключениями контекста не плохо справляется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2012, 21:52:52 |
|
||
|
вопрос по Thread.yield()
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, спасибо за ответ. А что насчет освобождения локов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2012, 22:25:39 |
|
||
|
вопрос по Thread.yield()
|
|||
|---|---|---|---|
|
#18+
видел тут на днях, кстати yield(), sleep(0), wait(0,1) and parkNanos(1) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2012, 23:00:11 |
|
||
|
вопрос по Thread.yield()
|
|||
|---|---|---|---|
|
#18+
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. Таким образом, оценки для 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 Что вполне обьясняемо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2012, 03:11:33 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=293&tid=2131929]: |
0ms |
get settings: |
9ms |
get forum list: |
23ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
46ms |
get topic data: |
19ms |
get forum data: |
5ms |
get page messages: |
71ms |
get tp. blocked users: |
2ms |
| others: | 334ms |
| total: | 521ms |

| 0 / 0 |
