Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Java - Multithreading on multicore

Ответить
Настройки темы
Java - Multithreading on multicore

Аватара для Flick

Пользователь


Сообщения: 146
Благодарности: 1

Профиль | Отправить PM | Цитировать


Здравствуйте, форумчане.
Если у вас есть пара свободных минут не могли бы вы пояснить дураку маленькие особенности запуска многопоточных Java аппликух на мнопроцессорных (многоядерных машинах)?
Как я понимаю, во сколько бы потоков я ни писал приложение, на процессоре эти потоки будут исполнятся как один поток, инструкция за инструкцией.
В случае когда у меня есть многопроецессорная машина или просто C2D какой-нибудь, будет ли JVM разбрасывать мои треды на разные ядры дабы ускорить выполнение.
Или, что бы реализовать настоящую многопоточность я должен запускать несколько JVM и заставлять их общаться по какой-нибудь RMI али CORBA ?

С уважением.

Отправлено: 15:06, 31-08-2009

 

Старожил


Сообщения: 435
Благодарности: 63

Профиль | Отправить PM | Цитировать


Flick, полного и исчерпывающего ответа нет.
Посмотрите эти ссылки, может поможет.
http://forums.sun.com/thread.jspa?threadID=5330507
http://www.infoq.com/news/2006/11/multi-core-java
http://www.gcn.com/Articles/2009/06/...ming-tips.aspx
http://sun.systemnews.com/articles/95/2/feature/15704
А какую JVM вы используете?

-------
black-eric.livejournal.com

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:48, 01-09-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Flick

Пользователь


Сообщения: 146
Благодарности: 1

Профиль | Отправить PM | Цитировать


использую, когда как, но не младше 1.4.15 как правило но в основном 1.6 - Спасибо за ссылки!

Отправлено: 11:42, 22-09-2009 | #3


Аватара для Yura

Пользователь


Сообщения: 60
Благодарности: 0

Профиль | Отправить PM | Цитировать


Насколько я знаю эти дела JVM правильно раскидывает потоки по процессорам.
Лучше использовать JRE v. >1.6

-------
При сбое - выдерни шнур, выдави стекло


Отправлено: 17:21, 22-09-2009 | #4


Аватара для Flick

Пользователь


Сообщения: 146
Благодарности: 1

Профиль | Отправить PM | Цитировать


Мда судя по прочитанному, в частности http://java.sun.com/docs/hotspot/threads/threads.html, потоки, которые мы делаем действительно раскидываются по процессорам в нейтив треды.
Смущает только следующая цитата - "Threads may be supported by having many hardware processors, by time-slicing a single hardware processor, or by time-slicing many hardware processors. " (взято отсюда - http://java.sun.com/docs/books/jvms/...doc.html#33308) - Прав ли я, утверждая, что в независимости от того как бы хорошо мы не распаралелили приложение, потоки все равно будут выполнятся один за другим? Или я не понимаю, что такое time-slicing ...

Отправлено: 12:49, 23-09-2009 | #5


Новый участник


Сообщения: 8
Благодарности: 5

Профиль | Отправить PM | Цитировать


Цитата Flick:
Прав ли я, утверждая, что в независимости от того как бы хорошо мы не распаралелили приложение, потоки все равно будут выполнятся один за другим? Или я не понимаю, что такое time-slicing »
Независимо от того многопроцессорная машина или однопроцессорная, операционные системы всё равно рубят любые потоки на части в соответствии с приоритетами. Это и есть time-slicing. Вызвано это тем, что число потоков (в пределах всей ОС) как правило больше, чем число процессоров в системе и процессорное время как-то надо делить между всеми желающими.

А остальное зависит от того, какую стратегию использует планировщик задач конкретной оси. Windows, например, по умолчанию стремится "размазать" даже один поток между всеми процессорами, рассылая каждому процессору по очереди свой кусочек. Исполнение потоков на одном/нескольких процессорах зависит от конкретной ситуации, которая сложилась в данный момент на данной ОС. Об этом, мне кажется, и речь в процитированном тексте. То есть, может быть так, может быть этак. Никаких гарантий.

Но это не значит, что не стоит распараллеливать код. При прочих равных условиях на многопроцессорных системах он, ясное дело, будет быстрее, чем однопоточный. Просто условия бывают разные.

Отправлено: 16:51, 30-09-2009 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Java - Multithreading on multicore

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено




 
Переход