Название: Выбор метода синхронизации рабочих мест Отправлено: ammaximus от Май 14, 2012, 12:55 Определенное приложение содержит 2 QVectora с не особо большим количеством элементов. Основой приложения является то, как оно с этими данными обращается - алгоритмы. К рабочей машине подключены устройства вывода, различные специальные устройства, активизирующиеся по результатам работы алгоритмов.
Помимо этого по локальной сети может быть подключена еще одна машина. Ее функции дублируют 1 только в плане отображения данных и управления запуском алгоритмов. Фактически это машина - view, необязательная. Таких машин может быть несколько. Подскажите наиболее удачный принцип реализации такого ПО, как правильно оформить связь между машинами? Название: Re: Выбор метода синхронизации рабочих мест Отправлено: Igors от Май 14, 2012, 14:47 Не очень понятно о чем Вы спрашиваете :). Ну если "другая машина" (значит др приложение и др адресное пр-во) то придется гнать данные на view (напр через сокеты)
Название: Re: Выбор метода синхронизации рабочих мест Отправлено: RealDuke от Май 18, 2012, 08:29 По мне, так проще по UDP броадкастом посылать какие-то данные. Можно целиком, а можно только коды, с последующей трансформацией на стороне приёмника.
Название: Re: Выбор метода синхронизации рабочих мест Отправлено: ammaximus от Август 07, 2012, 21:36 Мне интересны способы как можно сделать систему распределенных вычислений, т.е. на обоих машинах выполняется одна задача, разными процессами, но данные должны быть общими.
Я подумал о том, чтобы по завершению записи потоком (завершением считать вызов mutex.unlock) отправлялись данные на другой АРМ. Также определить приоритет обработки данных при одновременном посыле. Также мне нужно обеспечить межпроцессное взаимодействие на одном АРМе, это лучше сделать также сокетами или можно как то сделать мутексированный объект для обмена? Просто не хочется изобретать велосипед, возможно есть уже проверенные принципы и подходы. Название: Re: Выбор метода синхронизации рабочих мест Отправлено: Igors от Август 07, 2012, 22:11 Мне интересны способы как можно сделать систему распределенных вычислений, т.е. на обоих машинах выполняется одна задача, разными процессами, но данные должны быть общими. Строго говоря "общими" они быть не могут, на каждой машине должна быть своя, локальная копия данных, это нормально.Я подумал о том, чтобы по завершению записи потоком (завершением считать вызов mutex.unlock) отправлялись данные на другой АРМ. Также определить приоритет обработки данных при одновременном посыле. Также мне нужно обеспечить межпроцессное взаимодействие на одном АРМе, это лучше сделать также сокетами или можно как то сделать мутексированный объект для обмена? Все мутексы работают "в пределах одной машины", поэтому упоминание о них непонятно. Обычный подход - делить задачу на куски. Напр нужно посчитать большой имедж. Первая машина считает первую тысячу строк имеджа, вторая вторую и.т.д. Какое-то приложение-менеджер управляет считающими посылая им порции работы через сокеты. В общем, забот там хватает.Просто не хочется изобретать велосипед, возможно есть уже проверенные принципы и подходы. Название: Re: Выбор метода синхронизации рабочих мест Отправлено: ammaximus от Август 08, 2012, 13:59 Дело в том, что распределение производится не ради ускорения, а ради стабильности системы в случае отказа одного из компонентов. На обоих машинах работают одинаковые алгоритмы, а обмен между ними должен быть четко синхронизирован, чтобы они друг с другом не колизировали.
Мутексы это к тому, что по закрытию мутекса общих данных на локальной машине, я предполагаю, что алгоритм закончил квант записи и можно проводить синхронизацию, ибо думаю посылать по каждой измененной переменной не айс. Название: Re: Выбор метода синхронизации рабочих мест Отправлено: Igors от Август 08, 2012, 18:10 Мутексы это к тому, что по закрытию мутекса общих данных на локальной машине, .. Используя стандартные термины "как Вам хочется" Вы остаетесь непонятым Название: Re: Выбор метода синхронизации рабочих мест Отправлено: ammaximus от Август 09, 2012, 17:38 Да, есть такая проблема, но это не из-за невежества, скорее недостатка опыта :)
Попробую объяснить наглядно. Код: #ifndef COMMONDATA_H Это объект данных, который один для всех алгоритмов на каждой машине, но на разных машинах и объекты разные, поэтому их надо синхронизировать, ибо я хочу чтобы они работали сообща. Код: #ifndef ALGORITHM_H Это алгоритм. Для имитации разных машин я использую потоки и связываю их UDP. Код: #ifndef RULEFORM_H Писал этот код специально для форума, но получилось все равно много, поэтому остальное во вложении. |