![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
APM |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 13.7.2007 Репутация: нет Всего: 6 |
Подскажите где почитать по поводу решения вот такой задачи. Нужно с помощью RMI распараллелить некоторый алгоритм. Почитал про RMI, но не понял несколько вещей:
1) Как сделать так, чтобы в программу можно было передавать количество компьютеров, участвующих в работе. Т.е. допустим передаем параметр 5 и процесс делится на 5 машин, там ведь IP адреса приходится указывать, значит для нового числа машин придется исходный код править? 2) Есть некоторый метод, который выполняется очень долго. Как сделать так, чтобы один компьютер считал часть данных, параллельно ему другой другую часть и т.д. Я как понял когда мы вызываем метод, то нужно ждать результат. А нужно передать всем машинам данные и когда они досчитают принять результат обратно. |
|||
|
||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 2 Всего: 159 |
Напиши некий локатор вичислительных машин, который знает сколько компьютеров подключено к вычислительной системе и может раздавать всем задания. Если захочешь добавть дополнительную машину, то регистрируешь её на локаторе. Локатор сам по себе такой же RMI сервер, как и вычислительные сервера (машины). Используй либо многозадачность, либо RMI Callback. |
|||
|
||||
APM |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 13.7.2007 Репутация: нет Всего: 6 |
А можно ключевые слова для поиска информации по реализации многозадачности? Или ссылки на документацию. Никогда не приходилось использовать в приложениях многозадачность.
|
|||
|
||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 2 Всего: 159 |
Возможно ты уже слышал о многопоточности, или о работе с нитями, что впрочем одно и тоже. Это все тоже самое что и многозадачность. По крайней мере я вкладывал именно этот смысл в данное слово.
Официальный туториал Дополнительный материал: ссылка раз ссылка два |
|||
|
||||
APM |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 13.7.2007 Репутация: нет Всего: 6 |
Начал читать, но хотелось бы простенький пример, пусть есть вот такой код
В данном случае результат c.sub и c.add мы получаем последовательно, причем они запускаются на одном сервере. Допустим, что эти два метода выполняются на разных машинах, пусть машина А должна будет выполнить метод A.add, а машина B - B.add, причем выполнение этих методов должно происходить параллельно, и при получении от обоих машин результата допустим клиент должен их сложить. Задача чисто гипотетическая, естественно, практического смысла не имееет, просто хочу понять принцип. Это сообщение отредактировал(а) powerOn - 20.2.2008, 21:59 |
|||
|
||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 2 Всего: 159 |
Для такого поведения реализация будет примерно следующей:
Посмотри паттерн Future (на сколько я помню) для создания асинхронных операций. Или просто запускай в отдельном потоке с ожиданием. |
|||
|
||||
APM |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 13.7.2007 Репутация: нет Всего: 6 |
Никак не могу понять одной вещи. Как можно узнать, что некоторый метод, запущенный на удаленной машине закончил свою работу?
Пока только на ум приходит следующее: по окончанию своей работы на удаленной машине выставляется некоторый флажок, например dataReady, а на локальной машине через некоторый промежуток времени этот флажок проверяется, т.е. используем sleep(1000). Но такой подход мне что-то не очень нравится. |
|||
|
||||
Platon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 3 Всего: 40 |
powerOn уже все показал!!! Осталось только включить минимум знаний, и простейшая реализация параллельной работы готова.
|
|||
|
||||
APM |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 13.7.2007 Репутация: нет Всего: 6 |
Допустим Num = 2, тогда идея состоит в том, что на одной машине считаются все данные с четными номерами, а на другой с нечетными, но если смотреть для каких значений было вызвано вычисление, то получаем:
Т.е. для одного из потоков для одних и тех же значений вычисления проходят дважды. Я снова что-то недопонял? |
||||
|
|||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 2 Всего: 159 |
Мало кода. Совершенно не понятно как этот вывод формируется.
|
|||
|
||||
APM |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 13.7.2007 Репутация: нет Всего: 6 |
Ладно, с потоками попробую сам разобраться.
Еще один вопрос. При запуске программы сервера я создаю регистр командой
Этот регистр должен создаваться на одной машине или на каждой, где запускается программа-сервер? |
|||
|
||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 2 Всего: 159 |
На каждом сервере.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Работа с сетью | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |