![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
soulcub |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 130 Регистрация: 2.2.2010 Где: Винница, Украина Репутация: нет Всего: 2 |
Нашёл, как по мне, неплохой пример по приоритетам потоков.
и в том же примере написано, что в данном случае, без приоритетов потоки запускаются по-очереди и выполняются так же. То-есть на экране мы увидим нечто такое: Thread 0 started Thread 1 started Thread 2 started Thread 0 counts 0 Thread 1 counts 0 Thread 2 counts 0 Thread 0 counts 1 Thread 1 counts 1 Thread 2 counts 1 Thread 0 counts 2 Thread 2 counts 2 Thread 1 counts 2 Thread 2 counts 3 Thread 0 counts 3 Thread 1 counts 3 Thread 2 counts 4 Thread 0 counts 4 Thread 1 counts 4 По логике так и должно происходить, но у меня получается некий непонятный бред, который не поддаётся моей логике.. Выводит: Thread 0 started Thread 1 started Thread 2 started Thread 1 counts 0 Thread 1 counts 1 Thread 1 counts 2 Thread 0 counts 0 Thread 1 counts 3 Thread 0 counts 1 Thread 1 counts 4 Thread 0 counts 2 Thread 0 counts 3 Thread 2 counts 0 Thread 2 counts 1 Thread 0 counts 4 Thread 2 counts 2 Thread 2 counts 3 Thread 2 counts 4 в другой раз такое: Thread 0 started Thread 0 counts 0 Thread 1 started Thread 2 started Thread 1 counts 0 Thread 2 counts 0 Thread 0 counts 1 Thread 2 counts 1 Thread 0 counts 2 Thread 2 counts 2 Thread 0 counts 3 Thread 2 counts 3 Thread 0 counts 4 Thread 2 counts 4 Thread 1 counts 1 Thread 1 counts 2 Thread 1 counts 3 Thread 1 counts 4 Не могу понять в чём прикол. Есть догадка, что это связано с тем, что у меня проц двухядерный. Но почему оно действует именно так? Спасибо заранее. --------------------
Так давай же, поспеши!Отыскать СВОЙ куб души! |
|||
|
||||
AbdulBcex |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 6.11.2009 Репутация: нет Всего: 1 |
Вообще по логике потокам присваиватся приоритет потока их породившего. То есть в этом примере у всех потоков приоритет один и одинаков, следовательно распределение ресурсов может происходить каждый раз совершенно по разному и могут быть разные результаты.
Кстати, в книгах обычно наоборот пишут, что результаты различаться могут. Это сообщение отредактировал(а) AbdulBcex - 9.7.2010, 12:23 |
|||
|
||||
soulcub |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 130 Регистрация: 2.2.2010 Где: Винница, Украина Репутация: нет Всего: 2 |
Ну ок, логика есть. Но если делаю приоритетом(немного поменяю мейн)
тут же должно быть отчётливое доминирование 2-го над 1-м, и их обоих над 0-м, верно? А выводит: Thread 0 started Thread 0 counts 0 Thread 1 started Thread 2 started Thread 2 counts 0 Thread 1 counts 0 Thread 2 counts 1 Thread 1 counts 1 Thread 1 counts 2 Thread 2 counts 2 Thread 1 counts 3 Thread 2 counts 3 Thread 1 counts 4 Thread 2 counts 4 Thread 0 counts 1 Thread 0 counts 2 Thread 0 counts 3 Thread 0 counts 4 Окей, видно что 0-й поток в аутсайдерах, как и должно быть, но ведь 2-й поток должен быть на много приоритетнее чем 1-й, а они как на равных.. 1-й даже на 2-й итерации начал обгонять 2-1. С таким раскладом приоритетность вообще теряет свой смысл.. Может я что-то не так делаю? --------------------
Так давай же, поспеши!Отыскать СВОЙ куб души! |
|||
|
||||
jk1 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 40 Всего: 75 |
Дело в том, что выставление приоритетов само по себе ничего не гарантирует
Тут можно почитать подробнее о том, как это на самом деле работает. -------------------- Opinions are like assholes — everybody has one |
|||
|
||||
lazycat |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 15.7.2007 Репутация: 1 Всего: 1 |
Не факт. Это зависит от множества причин, в частности от используемой операционной системы. Дело в том, что для поддержки потоков JVM напрямую использует соответствующие средства ОСю Например, в Java определено 10 приоритетов для потоков, а в Windows - только 7. В результате 10 приоритетов отображаются в 7. Более того, в какой-то из версий Linux (не помно в какой) приоритеты вообще не поддерживаются. Результат не трудно предсказать, не так ли? Одним словом, приоритеты - это только "благие намерения". Полагаться на них - это значит создавать все условия для самых мерзких ошибок - тех, которые проявляются лишь изредка и надолго исчезают. Если Вам важен порядок запуска потоков, используйте средства синхронизации, семафоры, барьеры, если они не позволяют сделать то, что Вам надо, устанавливайте и проверяйте флаги самостоятельно. |
|||
|
||||
soulcub |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 130 Регистрация: 2.2.2010 Где: Винница, Украина Репутация: нет Всего: 2 |
Та почему-то на собеседовании на работу очень спрашивали именно про приоритетность потоков) Может про то, что не следует на них полагаться он ии хотели услышать, ну да ладно) Спасибо большое за ответы, совершенствуем знания =)
Это сообщение отредактировал(а) soulcub - 9.7.2010, 19:31 --------------------
Так давай же, поспеши!Отыскать СВОЙ куб души! |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |