Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / как работают приоритеты в потоках / 13 сообщений из 13, страница 1 из 1
17.03.2005, 14:46
    #32966035
black zorro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как работают приоритеты в потоках
кто мне объяснит как работают приоритеты потоков, потому что только что столкнулся с такой фишкой и не могу понять:
Код: 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.
class FirstTH extends Thread
{
	long c= 0 ;
	boolean running = true;
	FirstTH(String st)
	{
		super(st);
	}
	public void run()
	{
		while(running)
		{
			c ++ ;
			yield();
		}
	}
	public void stop1()
	{
		running =false;
	}
}

public class MainThreads {

	public static void main(String[] args) throws InterruptedException 
	{
		Thread mt = Thread.currentThread();
		
		FirstTH myht = new FirstTH("First");
		FirstTH myht1 = new FirstTH("Second");
		FirstTH myht2 = new FirstTH("Third");
		mt.setPriority(Thread.MAX_PRIORITY);
		myht.setPriority(Thread.MIN_PRIORITY);
		myht1.setPriority(Thread.NORM_PRIORITY);
		myht2.setPriority(Thread.MAX_PRIORITY);
		
		
		myht1.start();
		myht2.start();
		myht.start();

		Thread.sleep( 1000 );
		myht.stop1();
		myht1.stop1();
		myht2.stop1();
		System.out.println(myht.getName()+":"+myht.c);
		System.out.println(myht1.getName()+":"+myht1.c);
		System.out.println(myht2.getName()+":"+myht2.c);
		System.out.println(Thread.MAX_PRIORITY+" "+Thread.MIN_PRIORITY+" "+Thread.NORM_PRIORITY);

	}
}

после запуска получаются цифры:
для first - много миллионов
для second и third - 1, а без yield - вообще 0.
неужели за целую секунду два потока вообще не получили управления?
тот же результат когда делаю так:
Код: plaintext
1.
2.
3.
		myht.setPriority(Thread.NORM_PRIORITY -  2 );
		myht1.setPriority(Thread.NORM_PRIORITY -  1 );
		myht2.setPriority(Thread.MAX_PRIORITY);
если же всем потокам поставить один приоритет не важно какой то результаты примерно одинаковы. почему же в случае столь незначительного изменения проиритетов такая разбежка.
...
Рейтинг: 0 / 0
17.03.2005, 15:03
    #32966100
Зашедший
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как работают приоритеты в потоках
В общем-то нормальное поведение. Кстати, под какой операционной системой запускаешь? В зависимости от используемой JVM работа потоков может сильно меняться.
...
Рейтинг: 0 / 0
17.03.2005, 15:25
    #32966164
NotGonnaGetUs
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как работают приоритеты в потоках
А главное от используемой OS. Так как существуют разные реализации многопоточности (чередование времени/пока не отдаст управление) и вразных OS разные диапазоны для возможных приоритетов.

Поэтому везде в официальных источниках рекомендуется делать все потоки с однинаковым приоритетом и если в потоке выполняются долгие вычисления, давать возможность OS переключиться на другие потоки (yeild, sleep(10) и т.п.). Иначе, на разных платформах можно получить разное поведение, например, поток с низким приоритетом никогда не получит управление, или исполняться будет только один поток (с куском кода типа "for(;;);" ).
...
Рейтинг: 0 / 0
17.03.2005, 15:39
    #32966196
Зашедший
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как работают приоритеты в потоках
NotGonnaGetUsА главное от используемой OS. Так как существуют разные реализации многопоточности (чередование времени/пока не отдаст управление) и вразных OS разные диапазоны для возможных приоритетов.

Поэтому везде в официальных источниках рекомендуется делать все потоки с однинаковым приоритетом и если в потоке выполняются долгие вычисления, давать возможность OS переключиться на другие потоки (yeild, sleep(10) и т.п.). Иначе, на разных платформах можно получить разное поведение, например, поток с низким приоритетом никогда не получит управление, или исполняться будет только один поток (с куском кода типа "for(;;);" ).
Реализация потоков в JVM все-таки важнее ИМХО. Поведение native threads и green threads отличается значительно сильнее, чем native threads в разных ОС.
...
Рейтинг: 0 / 0
17.03.2005, 17:35
    #32966577
как работают приоритеты в потоках
вообще говоря, native thread's как раз и есть либо green, либо с чередованием по времени.

Везде пишут, что в линухе green, а в винде slicing, и что это существенно влияейт на исполнение потоков.

Или ты говоришь о JVM других производителей, не sun?
...
Рейтинг: 0 / 0
17.03.2005, 18:01
    #32966671
wessen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как работают приоритеты в потоках
думаю иначевообще говоря, native thread's как раз и есть либо green, либо с чередованием по времени.

Везде пишут, что в линухе green, а в винде slicing, и что это существенно влияейт на исполнение потоков.

Или ты говоришь о JVM других производителей, не sun?

Я книгу читал, там было написано, что зеленые потоки, это те, которые сама JVM реализует и что эта JVM под линух. Акцент был сделан на то, что это недоделка. Книга вроде 2003-2002 года и описывалась там jdk1.3 (JVM от SUN). Как сейчас дела с JVM под Линух обстоят не знаю.
...
Рейтинг: 0 / 0
17.03.2005, 18:14
    #32966727
Зашедший
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как работают приоритеты в потоках
думаю иначевообще говоря, native thread's как раз и есть либо green, либо с чередованием по времени.

Везде пишут, что в линухе green, а в винде slicing, и что это существенно влияейт на исполнение потоков.

Или ты говоришь о JVM других производителей, не sun?
Native threads - это как раз slicing, а green threads фактически эмуляция потоков в одном реальном потоке ОС. Под линуксом в Sun JVM 1.3 использовалась именно эмуляция потоков. По крайней мере так сами сановцы пишут :) Опыт использования Java на Win2K/Linux их слова подтверждает.
...
Рейтинг: 0 / 0
17.03.2005, 18:37
    #32966774
потестим
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как работают приоритеты в потоках
Принято.
Как бы то ни было, получается, что всё зависит от ОS, а не JVM.
На линухах получаем green, на виндах slicing, что не практически не зависит от версии/производителя JVM :)
...
Рейтинг: 0 / 0
17.03.2005, 18:39
    #32966778
как работают приоритеты в потоках
потестимПринято.
Как бы то ни было, получается, что всё зависит от ОS, а не JVM.
На линухах получаем green, на виндах slicing, что не практически не зависит от версии/производителя JVM :)
точнее от версии/производителя jre.
...
Рейтинг: 0 / 0
17.03.2005, 18:52
    #32966818
Зашедший
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как работают приоритеты в потоках
потестимПринято.
Как бы то ни было, получается, что всё зависит от ОS, а не JVM.
На линухах получаем green, на виндах slicing, что не практически не зависит от версии/производителя JVM :)
ИМХО неверно. Потоки ОПЕРАЦИОННОЙ СИСТЕМЫ в линуксе и винде устроены примерно одинаково - по принципу вытесняющей многозадачности. Проблема именно в реализации работы явовских потоков Thread. Если они используют системные потоки (то есть фактически делегируют ОС управление КАЖДЫМ потоком), то это будут native threads, а если используется ОДИН поток операционной системы, в котором JVM эмулирует многопоточность, сама выдавая кванты времени на исполнение java-потоков - это уже green threads. От ОС тоже, конечно, зависит, но от реализации потоков в JVM зависит намного сильнее. Например, на ОС с вытесняющей многозадачностью и native threads в JVM невозможно создать selfish (монопольный) поток. А если реализовать на той же самой ОС JVM с green threads, то монопольный поток не даст ни одному другому потоку получить управление.
...
Рейтинг: 0 / 0
17.03.2005, 19:09
    #32966849
не важно
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как работают приоритеты в потоках
ты не понял, что я хотел сказать.

Да, всё именно так, как говоришь ты.
Но, если посмотреть как это выглядит внешне, то мы видим одну и туже jre запущенную под linux и win. В первом случае имеем green, во втором slicing.
А то, что в одной версии jre для разных OS используется разная jvm - скрыто от глаз.

Кстати, у меня в памяти отлажились слова, что каждый java thread в linux реализуется как отдельный процесс (это можно пронаблюдать запустив ps), и взаимодействие между этими процессами крайне сложно осуществлять и т.д. в таком же роде. Скорее всего, я что-то не так понял, буду разбираться, искать источник :)
...
Рейтинг: 0 / 0
17.03.2005, 19:16
    #32966866
Зашедший
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как работают приоритеты в потоках
не важноты не понял, что я хотел сказать.

Да, всё именно так, как говоришь ты.
Но, если посмотреть как это выглядит внешне, то мы видим одну и туже jre запущенную под linux и win. В первом случае имеем green, во втором slicing.
А то, что в одной версии jre для разных OS используется разная jvm - скрыто от глаз.

Кстати, у меня в памяти отлажились слова, что каждый java thread в linux реализуется как отдельный процесс (это можно пронаблюдать запустив ps), и взаимодействие между этими процессами крайне сложно осуществлять и т.д. в таком же роде. Скорее всего, я что-то не так понял, буду разбираться, искать источник :)
Теперь понял и почти соглашусь :) Однако, видимо, под линуксом многое действительно зависит от конкретной версии и производителя JRE.
З.Ы. Все-таки мне кажется, что термин "native" лучше отражает суть реализации, чем "slicing"... Хотя это дело вкуса.
...
Рейтинг: 0 / 0
17.03.2005, 19:27
    #32966889
wessen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как работают приоритеты в потоках
Проверил сейчас на Линухе, так там все еще зеленые потоки, java такая стоит:
Код: plaintext
1.
2.
3.
java version "1.4.2_06"
Java(TM)  2  Runtime Environment, Standard Edition (build  1 . 4 .2_06-b03)
Java HotSpot(TM) Client VM (build  1 . 4 .2_06-b03, mixed mode)
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / как работают приоритеты в потоках / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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