 |
|

11.01.2017, 22:21
|
|
Участник форума
Регистрация: 24.11.2015
Сообщений: 165
С нами:
5509192
Репутация:
1457
|
|
Пришлось изучать фундаментальные труды, по альтернативами моделям, другие реализации(akka, killim, actor-foundary). Много времени уходит, пришел к более обобщенной модели. Обновил actor-model / actors — Bitbucket. Там можно посмотреть текущий прототип. Завтра выложу последний вариант.
Я пытаюсь придерживаться того, что все есть актор и все реализовывать на основе этого. Тоже тяжело предоставить метод расширения стандартного набора. Пытаюсь обобщить все задачи, которые можно решать. Тут вопрос экспериментов, тяжело что-то подобрать.
|
|
|

13.01.2017, 17:16
|
|
Участник форума
Регистрация: 24.11.2015
Сообщений: 165
С нами:
5509192
Репутация:
1457
|
|
Немного обновлю.
Переписал "немного". Решил использовать ForkJoinPool, стандартную реализацию. Получается относительно не плохая производительность.
Изменение в программировании поведения актора:
- теперь актору отправляется в сообщении массив объектов, получается на подобии RPC. Пример
Код:
Код:
send(1);
send(1, 2, 3, 4);
- поведение задается через методы, указывается имя метода и его сигнатура. Пример
Правила для регистрации метода как обработчика.
1 Соответствие сигнатуры
2 Соответствие задаваемого имении
3 Возвращаемое значение должно быть void
По примером можно понять общую концепцию.
|
|
|

16.01.2017, 12:39
|
|
Участник форума
Регистрация: 24.11.2015
Сообщений: 165
С нами:
5509192
Репутация:
1457
|
|
Реализовал эксперементальную версию, где любой java объект может быть актором, поведение задается через публичные методы.
Суть в том, что к каждому объекту может быть обработан только один вызов метода, в любой момент времени. Вызов метода, не ожидается, и результат не обрабатывается, на текущий момент.
https://gattsu@bitbucket.org/actormo...e-instance.git
Пример Counter
С точки зрения параллельной модели вычислений, все вызовы через Actor.send, являются потокобезопасны, и все внутренние значение когерентны. Можно реализовать обработку результата исполнения метода.
Хороший пример, это все ai классы на pts. Так как ai, может обработать только одно событие за раз, и менять внутренне состояние безопасно
ПС На данный момент код очень прост, и не возникнет сложности в понимании
|
|
|

25.01.2017, 02:05
|
|
Участник форума
Регистрация: 24.11.2015
Сообщений: 165
С нами:
5509192
Репутация:
1457
|
|
Продолжаем шаманизм, самая простая реализаци
В данной реализации можнно:
- создавать акторы, регистрировать объекты в системе Context.create(name, instance)
- отправлять сообщения, вызывать отложенный метод Context.send(methodName, ...arguments)
В один момент времени объект-актор, может обрабатывать только один вызов, остальные ожидают очереди обработки.
Если у класса объявлен публичный метод:
Код:
Код:
public void define() {
}
то данный метод будет вызван в первую очередь. Пример:
Код:
Код:
public class Define {
public void define() {
System.out.println("hello actor!");
}
public static void main(String...args) {
Model.launch(new Define());
}
}
Может создать объект-актор, из стандартного класса вывода System.out
Код:
Код:
public class Console implements Context {
public void define() {
final Reference console = create("console", System.out);
for(char c : "hello world!".toCharArray())
console.send("println", c);
}
public static void main(String...args) {
Model.launch(new Console());
}
}
Примечаний: Реализованно все топорно, нету оптимизаций, каждый вызов производит поиск метода заново, по имение и сигнатуре контента
|
|
|

25.01.2017, 02:07
|
|
Участник форума
Регистрация: 24.11.2015
Сообщений: 165
С нами:
5509192
Репутация:
1457
|
|
Точка входа для любой модели:
Model.launch(instance)
|
|
|

25.01.2017, 05:07
|
|
Участник форума
Регистрация: 24.11.2015
Сообщений: 165
С нами:
5509192
Репутация:
1457
|
|
Добавил ожидание завершиния отложеного вызова.
При вызове метода send возвращается объект Callback, если через методы данного объекта, были установлены обработчик успешного и провального завершения вызова, или хотябы один обработчик, тогда актор блокирует и ожидает завершения. Все входящие сообщения, в очереди, ожидаю пока актор завершит запрос.
TODO таймер проверять, если ожидание привышает норму, установлиную через настройку, или вручную пользователем, завершать или отображать сообщения на консоли.
Примечание:
Провальный вызов - когда вызов генерирует исключительную ситуацию
|
|
|
|
 |
|
Предыдущая тема
Следующая тема
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|