|
|
|
как работают приоритеты в потоках
|
|||
|---|---|---|---|
|
#18+
кто мне объяснит как работают приоритеты потоков, потому что только что столкнулся с такой фишкой и не могу понять: Код: plaintext 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. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. для first - много миллионов для second и third - 1, а без yield - вообще 0. неужели за целую секунду два потока вообще не получили управления? тот же результат когда делаю так: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 14:46 |
|
||
|
как работают приоритеты в потоках
|
|||
|---|---|---|---|
|
#18+
В общем-то нормальное поведение. Кстати, под какой операционной системой запускаешь? В зависимости от используемой JVM работа потоков может сильно меняться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 15:03 |
|
||
|
как работают приоритеты в потоках
|
|||
|---|---|---|---|
|
#18+
А главное от используемой OS. Так как существуют разные реализации многопоточности (чередование времени/пока не отдаст управление) и вразных OS разные диапазоны для возможных приоритетов. Поэтому везде в официальных источниках рекомендуется делать все потоки с однинаковым приоритетом и если в потоке выполняются долгие вычисления, давать возможность OS переключиться на другие потоки (yeild, sleep(10) и т.п.). Иначе, на разных платформах можно получить разное поведение, например, поток с низким приоритетом никогда не получит управление, или исполняться будет только один поток (с куском кода типа "for(;;);" ). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 15:25 |
|
||
|
как работают приоритеты в потоках
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUsА главное от используемой OS. Так как существуют разные реализации многопоточности (чередование времени/пока не отдаст управление) и вразных OS разные диапазоны для возможных приоритетов. Поэтому везде в официальных источниках рекомендуется делать все потоки с однинаковым приоритетом и если в потоке выполняются долгие вычисления, давать возможность OS переключиться на другие потоки (yeild, sleep(10) и т.п.). Иначе, на разных платформах можно получить разное поведение, например, поток с низким приоритетом никогда не получит управление, или исполняться будет только один поток (с куском кода типа "for(;;);" ). Реализация потоков в JVM все-таки важнее ИМХО. Поведение native threads и green threads отличается значительно сильнее, чем native threads в разных ОС. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 15:39 |
|
||
|
как работают приоритеты в потоках
|
|||
|---|---|---|---|
|
#18+
вообще говоря, native thread's как раз и есть либо green, либо с чередованием по времени. Везде пишут, что в линухе green, а в винде slicing, и что это существенно влияейт на исполнение потоков. Или ты говоришь о JVM других производителей, не sun? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 17:35 |
|
||
|
как работают приоритеты в потоках
|
|||
|---|---|---|---|
|
#18+
думаю иначевообще говоря, native thread's как раз и есть либо green, либо с чередованием по времени. Везде пишут, что в линухе green, а в винде slicing, и что это существенно влияейт на исполнение потоков. Или ты говоришь о JVM других производителей, не sun? Я книгу читал, там было написано, что зеленые потоки, это те, которые сама JVM реализует и что эта JVM под линух. Акцент был сделан на то, что это недоделка. Книга вроде 2003-2002 года и описывалась там jdk1.3 (JVM от SUN). Как сейчас дела с JVM под Линух обстоят не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 18:01 |
|
||
|
как работают приоритеты в потоках
|
|||
|---|---|---|---|
|
#18+
думаю иначевообще говоря, native thread's как раз и есть либо green, либо с чередованием по времени. Везде пишут, что в линухе green, а в винде slicing, и что это существенно влияейт на исполнение потоков. Или ты говоришь о JVM других производителей, не sun? Native threads - это как раз slicing, а green threads фактически эмуляция потоков в одном реальном потоке ОС. Под линуксом в Sun JVM 1.3 использовалась именно эмуляция потоков. По крайней мере так сами сановцы пишут :) Опыт использования Java на Win2K/Linux их слова подтверждает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 18:14 |
|
||
|
как работают приоритеты в потоках
|
|||
|---|---|---|---|
|
#18+
Принято. Как бы то ни было, получается, что всё зависит от ОS, а не JVM. На линухах получаем green, на виндах slicing, что не практически не зависит от версии/производителя JVM :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 18:37 |
|
||
|
как работают приоритеты в потоках
|
|||
|---|---|---|---|
|
#18+
потестимПринято. Как бы то ни было, получается, что всё зависит от ОS, а не JVM. На линухах получаем green, на виндах slicing, что не практически не зависит от версии/производителя JVM :) точнее от версии/производителя jre. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 18:39 |
|
||
|
как работают приоритеты в потоках
|
|||
|---|---|---|---|
|
#18+
потестимПринято. Как бы то ни было, получается, что всё зависит от ОS, а не JVM. На линухах получаем green, на виндах slicing, что не практически не зависит от версии/производителя JVM :) ИМХО неверно. Потоки ОПЕРАЦИОННОЙ СИСТЕМЫ в линуксе и винде устроены примерно одинаково - по принципу вытесняющей многозадачности. Проблема именно в реализации работы явовских потоков Thread. Если они используют системные потоки (то есть фактически делегируют ОС управление КАЖДЫМ потоком), то это будут native threads, а если используется ОДИН поток операционной системы, в котором JVM эмулирует многопоточность, сама выдавая кванты времени на исполнение java-потоков - это уже green threads. От ОС тоже, конечно, зависит, но от реализации потоков в JVM зависит намного сильнее. Например, на ОС с вытесняющей многозадачностью и native threads в JVM невозможно создать selfish (монопольный) поток. А если реализовать на той же самой ОС JVM с green threads, то монопольный поток не даст ни одному другому потоку получить управление. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 18:52 |
|
||
|
как работают приоритеты в потоках
|
|||
|---|---|---|---|
|
#18+
ты не понял, что я хотел сказать. Да, всё именно так, как говоришь ты. Но, если посмотреть как это выглядит внешне, то мы видим одну и туже jre запущенную под linux и win. В первом случае имеем green, во втором slicing. А то, что в одной версии jre для разных OS используется разная jvm - скрыто от глаз. Кстати, у меня в памяти отлажились слова, что каждый java thread в linux реализуется как отдельный процесс (это можно пронаблюдать запустив ps), и взаимодействие между этими процессами крайне сложно осуществлять и т.д. в таком же роде. Скорее всего, я что-то не так понял, буду разбираться, искать источник :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 19:09 |
|
||
|
как работают приоритеты в потоках
|
|||
|---|---|---|---|
|
#18+
не важноты не понял, что я хотел сказать. Да, всё именно так, как говоришь ты. Но, если посмотреть как это выглядит внешне, то мы видим одну и туже jre запущенную под linux и win. В первом случае имеем green, во втором slicing. А то, что в одной версии jre для разных OS используется разная jvm - скрыто от глаз. Кстати, у меня в памяти отлажились слова, что каждый java thread в linux реализуется как отдельный процесс (это можно пронаблюдать запустив ps), и взаимодействие между этими процессами крайне сложно осуществлять и т.д. в таком же роде. Скорее всего, я что-то не так понял, буду разбираться, искать источник :) Теперь понял и почти соглашусь :) Однако, видимо, под линуксом многое действительно зависит от конкретной версии и производителя JRE. З.Ы. Все-таки мне кажется, что термин "native" лучше отражает суть реализации, чем "slicing"... Хотя это дело вкуса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 19:16 |
|
||
|
как работают приоритеты в потоках
|
|||
|---|---|---|---|
|
#18+
Проверил сейчас на Линухе, так там все еще зеленые потоки, java такая стоит: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 19:27 |
|
||
|
|

start [/forum/topic.php?fid=59&tid=2152793]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
39ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 231ms |
| total: | 375ms |

| 0 / 0 |
