Продолжение на Java

Я ищу недавние работы, представляющие продолжения на Java. Я столкнулся с тем же вопросом здесь, но он датируется годом или двумя.

Есть некоторые работы, такие как JavaFlow от Apache, RIFE Continuations (которые я сейчас не могу скачать по какой-либо причине). Также существует сообщение в блоге, в котором упоминается поддержка JDK, но похоже, что поддержка будет распространяться на Java 8. Я также считаю, что продолжения также представлены в последние версии Scala.

Я ищу реализации на Java, представляющие концепцию продолжений. И я не ищу работы, которые представляют стиль передачи продолжения (CSP).

Буду благодарен вам за любую другую работу.


person nobeh    schedule 17.09.2011    source источник
comment
Пост редактировал, теперь понятно?   -  person nobeh    schedule 17.09.2011
comment
В Java обычно есть лучший способ решить проблему, чем использование совместных подпрограмм или продолжений. Отчасти это связано с тем, что Java не поддерживает его.   -  person Peter Lawrey    schedule 17.09.2011
comment
@PeterLawrey Что ж, я могу не полностью согласиться с вами, поскольку они планируют эту функцию программирования для JDK 8. А с точки зрения многоядерного программирования и приостановки некоторого кода, кажется, необходимы продолжения. Пожалуйста, поправьте меня, если я ошибаюсь.   -  person nobeh    schedule 18.09.2011
comment
Продолжение может быть полезно, и я могу включить его в Java 8. Однако я думаю, что их главное преимущество - это легкая многопоточность, которую вы можете контролировать. Чем больше ядер, тем проще решить проблему с помощью оборудования и потоков.   -  person Peter Lawrey    schedule 18.09.2011


Ответы (3)


Из вашего сообщения неясно, почему JavaFlow не соответствует вашим потребностям. JYeild - еще одна библиотека, и я бы начал с проекта Apache, прежде чем попробовать такой проект, как JYeild, с меньше поддержки.

person Chip McCormick    schedule 10.12.2011

недавно мы добавили первоклассные продолжения в kilim и подготовили предварительный релиз 2.0.

http://github.com/nqzero/kilim

вот фрагмент, который вычисляет XorShift (количество раз):

    public static class X2 extends Continuation implements Loop {
    long result;
    public void execute() throws Pausable {
        long x, y, s0=103, s1=17;
        while (true) {
            x = s0;
            y = s1;
            s0 = y;
            x ^= (x << 23);
            s1 = x ^ y ^ (x >> 17) ^ (y >> 26);
            result = (s1 + y);
            Fiber.yield();
        }
    }
    public long loop(long num) {
        long val = 0;
        for (int ii=0; ii < num && !run(); ii++)
            val = val ^ result;
        return val;
    }
}

Также предоставляется средство более высокого уровня (называемое Задачей), которое автоматически назначается, например, из-за прибытия сетевого пакета или завершения чтения файла

person nqzero    schedule 09.12.2016

Checkout недавно выпустила экспериментальную поддержку сопрограмм в Kotlin

Например, Приведенный ниже фрагмент кода показывает, что сопрограммы в Koltin на самом деле являются легковесными потоками. Создание 100000 обычных потоков, скорее всего, вызовет серьезную ошибку, такую ​​как OutOfMemoryError, но этот код работает нормально:

fun main(args: Array<String>) = runBlocking<Unit> {
    val jobs = List(100_000) { // create a lot of coroutines and list their jobs
        launch(CommonPool) {
            delay(1000L)
            print(".")
        }
    }
    jobs.forEach { it.join() } // wait for all jobs to complete
}

Конечно, здесь нет большого волшебства, и Kotlin просто сгенерирует для вас код во время компиляции, который выполнит все эти 100000 задач в ForkJoinPool.

В документации есть еще много интересных примеров.

person Andrey    schedule 06.03.2017
comment
Пожалуйста, включите основные части ответа по ссылке здесь и предоставьте ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если связанная страница изменится. - person Ivan Pavičić; 06.03.2017