HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > Общие вопросы программирования
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #11  
Старый 11.01.2017, 22:21
gattsu
Участник форума
Регистрация: 24.11.2015
Сообщений: 165
С нами: 5509192

Репутация: 1457
По умолчанию

Пришлось изучать фундаментальные труды, по альтернативами моделям, другие реализации(akka, killim, actor-foundary). Много времени уходит, пришел к более обобщенной модели. Обновил actor-model / actors — Bitbucket. Там можно посмотреть текущий прототип. Завтра выложу последний вариант.

Я пытаюсь придерживаться того, что все есть актор и все реализовывать на основе этого. Тоже тяжело предоставить метод расширения стандартного набора. Пытаюсь обобщить все задачи, которые можно решать. Тут вопрос экспериментов, тяжело что-то подобрать.
 
Ответить с цитированием

  #12  
Старый 13.01.2017, 17:16
gattsu
Участник форума
Регистрация: 24.11.2015
Сообщений: 165
С нами: 5509192

Репутация: 1457
По умолчанию

Немного обновлю.

Переписал "немного". Решил использовать ForkJoinPool, стандартную реализацию. Получается относительно не плохая производительность.

Изменение в программировании поведения актора:

- теперь актору отправляется в сообщении массив объектов, получается на подобии RPC. Пример

Код:


Код:
send(1);
send(1, 2, 3, 4);
- поведение задается через методы, указывается имя метода и его сигнатура. Пример

Правила для регистрации метода как обработчика.

1 Соответствие сигнатуры

2 Соответствие задаваемого имении

3 Возвращаемое значение должно быть void

По примером можно понять общую концепцию.
 
Ответить с цитированием

  #13  
Старый 16.01.2017, 12:39
gattsu
Участник форума
Регистрация: 24.11.2015
Сообщений: 165
С нами: 5509192

Репутация: 1457
По умолчанию

Реализовал эксперементальную версию, где любой java объект может быть актором, поведение задается через публичные методы.

Суть в том, что к каждому объекту может быть обработан только один вызов метода, в любой момент времени. Вызов метода, не ожидается, и результат не обрабатывается, на текущий момент.

https://gattsu@bitbucket.org/actormo...e-instance.git

Пример Counter

С точки зрения параллельной модели вычислений, все вызовы через Actor.send, являются потокобезопасны, и все внутренние значение когерентны. Можно реализовать обработку результата исполнения метода.

Хороший пример, это все ai классы на pts. Так как ai, может обработать только одно событие за раз, и менять внутренне состояние безопасно

ПС На данный момент код очень прост, и не возникнет сложности в понимании
 
Ответить с цитированием

  #14  
Старый 25.01.2017, 02:05
gattsu
Участник форума
Регистрация: 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());
    }
}
Примечаний: Реализованно все топорно, нету оптимизаций, каждый вызов производит поиск метода заново, по имение и сигнатуре контента
 
Ответить с цитированием

  #15  
Старый 25.01.2017, 02:07
gattsu
Участник форума
Регистрация: 24.11.2015
Сообщений: 165
С нами: 5509192

Репутация: 1457
По умолчанию

Точка входа для любой модели:

Model.launch(instance)
 
Ответить с цитированием

  #16  
Старый 25.01.2017, 05:07
gattsu
Участник форума
Регистрация: 24.11.2015
Сообщений: 165
С нами: 5509192

Репутация: 1457
По умолчанию

Добавил ожидание завершиния отложеного вызова.

При вызове метода send возвращается объект Callback, если через методы данного объекта, были установлены обработчик успешного и провального завершения вызова, или хотябы один обработчик, тогда актор блокирует и ожидает завершения. Все входящие сообщения, в очереди, ожидаю пока актор завершит запрос.

TODO таймер проверять, если ожидание привышает норму, установлиную через настройку, или вручную пользователем, завершать или отображать сообщения на консоли.

Примечание:

Провальный вызов - когда вызов генерирует исключительную ситуацию
 
Ответить с цитированием
Ответ



Предыдущая тема Следующая тема

Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.