|
|
|
Thread.yeald() - зачем он нужен?
|
|||
|---|---|---|---|
|
#18+
Чего-то не понимаю смысла метода Thread.yeald() смотрю пример отсюда: http://www.tutorialspoint.com/java/lang/thread_yield.htm Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. out: авторThread 1 is yielding control... Thread 2 is yielding control... Thread 3 is yielding control... Thread 1 has finished executing. Thread 2 has finished executing. Thread 3 has finished executing. везде пишется, что этот метод позволяет дать исполняться другим потокам. я чего-то не понимаю что в этом примере мешает потокам исполняться параллельно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2014, 21:37 |
|
||
|
Thread.yeald() - зачем он нужен?
|
|||
|---|---|---|---|
|
#18+
или это проблема когда потоков сильно больше чем процессорных ядер ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2014, 21:52 |
|
||
|
Thread.yeald() - зачем он нужен?
|
|||
|---|---|---|---|
|
#18+
Представьте, что у вас на компьютере 4 ядра, а работают одновременно 16 потоков. В этом случае у вас одновременно работают только 4 потока, а остальные 12 курят. Если вы хотите, что бы один работающий поток передал управление другому "курящему" - тогда вы вызываете Thread.yield(). На практике этот метод не используется. Если вы поищете по JDK, кто его вызывает, то найдете буквально 2-3 библиотечных класса из java.util.concurrent, которые его как-от задействуют в своих хитрых алгоритмах. В обычной жизни толку от него, как правило, нет. Так что можете смело игнорировать существование этого метода :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2014, 21:53 |
|
||
|
Thread.yeald() - зачем он нужен?
|
|||
|---|---|---|---|
|
#18+
DEVcoachНа практике этот метод не используется. Если вы поищете по JDK, кто его вызывает, то найдете буквально 2-3 библиотечных класса из java.util.concurrent, которые его как-от задействуют в своих хитрых алгоритмах. В обычной жизни толку от него, как правило, нет. Так что можете смело игнорировать существование этого метода :-) В J2ME по-моему используется. Там многозадачность кооперативная. А так как Java кросс-платформенное решение, то и в других платформах, вероятно этот метод тоже можно применить в аналогичных случаях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2014, 22:02 |
|
||
|
Thread.yeald() - зачем он нужен?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczDEVcoachНа практике этот метод не используется. Если вы поищете по JDK, кто его вызывает, то найдете буквально 2-3 библиотечных класса из java.util.concurrent, которые его как-от задействуют в своих хитрых алгоритмах. В обычной жизни толку от него, как правило, нет. Так что можете смело игнорировать существование этого метода :-) В J2ME по-моему используется. Там многозадачность кооперативная. А так как Java кросс-платформенное решение, то и в других платформах, вероятно этот метод тоже можно применить в аналогичных случаях. А мы используем - есть потоки длительные, а есть короткие. Для длительных потоков вызываем yeald в нескольких местах - что бы на долго не стопорить короткие потоки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2014, 22:39 |
|
||
|
Thread.yeald() - зачем он нужен?
|
|||
|---|---|---|---|
|
#18+
Код: java 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2014, 00:15 |
|
||
|
Thread.yeald() - зачем он нужен?
|
|||
|---|---|---|---|
|
#18+
questionerвезде пишется, что этот метод позволяет дать исполняться другим потокам. я чего-то не понимаю что в этом примере мешает потокам исполняться параллельно?yield() сообщает планировщику, что данному потоку процессорное время сейчас не требуется. Соответственно, планировщик начинает процесс диспетчеризации и может запустить какой-либо из ожидающих потоков, который, в противном случае, ждал бы окончания кванта времени. Эффект - улучшение реактивности системы. Особенно заметно когда "дисциплинированные" программы "кладут проц на полку" из-за высокой предложенной нагрузки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2014, 17:27 |
|
||
|
Thread.yeald() - зачем он нужен?
|
|||
|---|---|---|---|
|
#18+
странно, никто не сказал, что "йилд" ничего не гаранитирует, и в этом смысле вообще не понятно зачем он нужен, если есть Thread.sleep(), который точно сработает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 16:30 |
|
||
|
Thread.yeald() - зачем он нужен?
|
|||
|---|---|---|---|
|
#18+
rema174странно, никто не сказал, что "йилд" ничего не гаранитирует, и в этом смысле вообще не понятно зачем он нужен, если есть Thread.sleep(), который точно сработает А что он должен гарантировать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 16:33 |
|
||
|
Thread.yeald() - зачем он нужен?
|
|||
|---|---|---|---|
|
#18+
Blazkowiczrema174странно, никто не сказал, что "йилд" ничего не гаранитирует, и в этом смысле вообще не понятно зачем он нужен, если есть Thread.sleep(), который точно сработает А что он должен гарантировать? прекратить выполнение текущего потока ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 16:36 |
|
||
|
Thread.yeald() - зачем он нужен?
|
|||
|---|---|---|---|
|
#18+
а точне перевести потов в состояние runnable ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 16:37 |
|
||
|
Thread.yeald() - зачем он нужен?
|
|||
|---|---|---|---|
|
#18+
rema174прекратить выполнение текущего потока С какой стати? Это хинт планировщику "если у тебя есть дела поважнее, то можешь ими заняться". А можешь не заняться. А ещё реализация зависит от ОС и платформы. Если планировщику побоку такие хинты, он может их игнорировать. Почему ты решил что этот метод что-то прекращает - не понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 16:42 |
|
||
|
Thread.yeald() - зачем он нужен?
|
|||
|---|---|---|---|
|
#18+
https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html yield() A hint to the scheduler that the current thread is willing to yield its current use of a processor. Хинт - это типа подсказка планировщику что текущий поток закончил работу и готов уступить своё время следующему. Далее - моё сугубо личное ИМХО: Хинт по всей вероятности возник в эпоху слабых JVM (старые мобилки, встроенная техника), которые не умели пользовать мультизадачность и понимали только continuations. Для современных JVM этот хинт скорее всего не нужен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 16:57 |
|
||
|
Thread.yeald() - зачем он нужен?
|
|||
|---|---|---|---|
|
#18+
rema174странно, никто не сказал, что "йилд" ничего не гаранитируетУчитесь читать - я выделил курсивом существенные слова.и в этом смысле вообще не понятно зачем он нужен, если есть Thread.sleep(), который точно сработаетЕсть желание подождать - используйте wait(период) класса Object, а sleep(период) это хороший способ поиметь проблемы на ровном месте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 17:00 |
|
||
|
Thread.yeald() - зачем он нужен?
|
|||
|---|---|---|---|
|
#18+
maytonДля современных JVM этот хинт скорее всего не нужен.Нужен. Точнее - полезен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 17:02 |
|
||
|
Thread.yeald() - зачем он нужен?
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovmaytonДля современных JVM этот хинт скорее всего не нужен.Нужен. Точнее - полезен. Ммм... почти готов согласиться. Необходим бенчмарк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 17:08 |
|
||
|
Thread.yeald() - зачем он нужен?
|
|||
|---|---|---|---|
|
#18+
maytonНеобходим бенчмарк.Результат я и так могу сказать - потеряете процент-другой на пропускной способности и получите (намного) более отзывчивую систему в условиях сильной загрузки. Что лучше становится понятно, когда требуется "что-то делать" на этой системе "в условиях сильной загрузки". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 17:13 |
|
||
|
Thread.yeald() - зачем он нужен?
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovmaytonНеобходим бенчмарк.Результат я и так могу сказать - потеряете процент-другой на пропускной способности и получите (намного) более отзывчивую систему в условиях сильной загрузки. Что лучше становится понятно, когда требуется "что-то делать" на этой системе "в условиях сильной загрузки". Еще раз возвращаясь на несколько постов назад. Хинт "yield" полезен но для того чтобы оценить его пользу требуется выбирать между "отзывчивостью" и системы и "пропускной способностью". Правильно ли я понял мысль? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 17:16 |
|
||
|
Thread.yeald() - зачем он нужен?
|
|||
|---|---|---|---|
|
#18+
maytonПравильно ли я понял мысль?Да, но потери пропускной способности настолько мизерны, что в тех случаях, когда yield() вообще применим, на это можно не обращать внимание. Скорее "простая человеческая лень" будет решать - появится yield или нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 17:22 |
|
||
|
Thread.yeald() - зачем он нужен?
|
|||
|---|---|---|---|
|
#18+
questioner, у тебя есть еще какие-либо вопросы по применению yield ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 17:41 |
|
||
|
Thread.yeald() - зачем он нужен?
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorovsleep(период) это хороший способ поиметь проблемы на ровном месте. почему? разве sleep(период) не приостановит текущий поток на заданное время, открыв тем самым "дорогу" другим потокам? и чем он в этом смысле отличаетсятся от йилд, который тоже говорит диспетчеру потоков,что готов уступить "квант времени" другому потоку. так ли сильно они отличаются? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 21:11 |
|
||
|
Thread.yeald() - зачем он нужен?
|
|||
|---|---|---|---|
|
#18+
rema174Basil A. Sidorovsleep(период) это хороший способ поиметь проблемы на ровном месте. почему? разве sleep(период) не приостановит текущий поток на заданное время, открыв тем самым "дорогу" другим потокам? и чем он в этом смысле отличаетсятся от йилд, который тоже говорит диспетчеру потоков,что готов уступить "квант времени" другому потоку. так ли сильно они отличаются? Тем и отличается, что sleep приостановит в любом случае, а yeild, только если шедулер решит что от этого будет польза. И, как я уже указал выше, реализация зависит от платформы и операционки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 22:03 |
|
||
|
Thread.yeald() - зачем он нужен?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, может Basil A. Sidorov еще пояснит насчет sleep(период) и проблем на ровном месте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 23:48 |
|
||
|
Thread.yeald() - зачем он нужен?
|
|||
|---|---|---|---|
|
#18+
rema174Blazkowicz, может Basil A. Sidorov еще пояснит насчет sleep(период) и проблем на ровном месте Потому что при наличии yeild(), sleep() достаточно бесполезная операция в работающем коде. Если она используется, то это либо тестовый код, либо некий кривой костыль. Если у вас есть примеры практического применения sleep(), расскажите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2015, 08:50 |
|
||
|
Thread.yeald() - зачем он нужен?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Я доселе вообще yield() не использовал, но там где использовался sleep() я понимал почему так делал. Как я понимаю, sleep() - "попридержать поток", а yield() - делегировать проц-е время. Но тогда применение sleep() тоже делегирует проц-е время, только на конкретный период, а yield() - как диспетчер решит. В этом смысле, как заметил Basil, если sleep() - проблемы на ровном месте, то при каких условиях и как их заметить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2015, 09:23 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38931232&tid=2125556]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
157ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 486ms |

| 0 / 0 |
