Пишу библиотеку для своего пользования.
Суть
распределенная система с широкой прозрачностью, на основе модели акторов. Не блокирующая синхронизация.
Пока есть основа, исполнители(который думаю перепишу еще пару раз)
Хочу включить в модель акторов
- файлы
- сеть
- логирование
- все остальное
Знаю есть прочие библиотеки: акка, встроенная и другие. Но я делаю свою реализацию
В планах написать саморасширяющий веб-сервер, который установив его в определенную среду будет расширять себя, имея модель и счет с деньгами, по мере нагрузки.(на облаках)
Для тех кто в танке
Отсутствует использования системной синхронизаций. Не блокирующая синхронизация. Синхронизация делается путем распределения объектов между задачами и исполнителями(потоками). Может существовать два вида синхронизации вертикальная и горизонтальная.
Вертикальная - синхронизация, когда ресур зарезервирован за определенным исполнителем(потоком)
Горизонтальная - синхронизация, когда ресурсом владеет один исполнитель, и передает его следующему. Способ реализации: циклическая очередь. Исполнитель проверяет доступ к ресурсу, если его id, то использует ресур и после использования передает следующему.
Декомпозиция и синхронизация делается в ручную, пока думаю над программным способом, контроля и оповещения(аннотация и общий родитель). Чтобы писать хорошее ПО, надо иметь мозги, вообщем.
Пример кода
код
PHP код:
<?php
object TestApp {
class TestContext(var id: Int) {
var count = 0 }
class TestWork extends Work[TestContext]("TestWork") { val (t0, t1, t2, t3) = ( task(_t0), task(_t1), task(_t2), task(_t3)
)
def _t0(context: TestContext) = { println(s"Task t0 work ${name}")
}
def _t1(context: TestContext) = { println(s"Task t1 work ${name}")
}
def _t2(context: TestContext) = { println(s"Task t2 work ${name}")
}
def _t3(context: TestContext) = { println(s"Task t3 work ${name}")
}
def init(pool: ExecutorPool) : Unit = { start = t0
t0 -> t1 -> t2 -> t3
pool map (0, t0, t1, t2, t3)
}
}
def main(args: Array[String]) : Unit = { println("hello world")
var work = new TestWork
var pool = ExecutorPool(5)
pool register work
pool init { work create new TestContext(0)
}
pool start }
}
если сделать так
t0 -> t1 -> t2 -> t3 -> t0
работа будет зациклена
ПС Может кто-то разбирается, и может быть ему интересно будет, но вряд ли тут найдешь кого-то адекватного
ПС Да в планах, есть реализация сервера la2. Есть сервер авторизации, делать буду только платную версию, будет выложен полностью рабочий сервер авторизации исходники, и сырые исходники игрового сервера.
Код сырой и не документирован, для тех кто разбирается. Позже опишу, вылажу математическую модель.
Открыл код
Увидел тонну TODO, не мало бесполезных комментариев, а так же закомментированного кода.
Куда смотреть? Зачем это нужно? Почему надо тратить время, чтобы в этом разобраться?
Или я неадекватный теперь, если не хочу разбираться в подобном проджекте?
Или Вы себе дали carte-blanche понятием "Код сырой и не документирован" чтобы никто не придирался к коду, комментариям и вообще содержанию проекта?
Цитата:Знаю есть прочие библиотеки: акка, встроенная и другие. Но я делаю свою реализацию
Зачем?
Цитата:Чтобы писать хорошее ПО, надо иметь мозги, вообщем.
Несомненно, судя по проекту я понял, что мозги у Вас есть (как и у всех людей), но вот можно ли ими блеснуть с помощью этой работы? - Не думаю.
Donatte Написал:Глупый вопрос можно? А зачем изобретать велосипед при написании собственных методов и библиотек? Чем вас не устраивают написанные кем-то?
Где логика? :confused:
Цитата:ПС Люблю велосипеды. Это мне напоминает пользование библиотеками все используют, чтобы с видео работать, а толком реализации не знают, стандарта. Кто-то из вас загружал JPEG из файла с помощь встроенной библиотеки в JAVA, но кто писал свою загрузку, реализацию. Для меня хуже не бывает, хуже чем такое пользование
А кто сказал, что я велосипед делаю, я изучаю все аналоги, смотрю как там сделано, как можно сделать, пробую свое.
Это опыт написание, понимаю принципов, и так далее
"Ребят, я написал тут System.out.println("pewpew"). Код только для меня, но в будущем будет сервер la2 (платный только). В планах запилить логгирование, документацию, масштабирование, %ещё_пара_слов%".
shegan Написал:"Ребят, я написал тут System.out.println("pewpew"). Код только для меня, но в будущем будет сервер la2 (платный только). В планах запилить логгирование, документацию, масштабирование, %ещё_пара_слов%".